shell脚本----编程原理
1、编程介绍:
计算机只能识别二进制指令。
程序=指令+数据
早期编程:
驱动:
硬件默认是不能使用的;
CPU控制硬件。
作用:提供不同的厂家硬件设备之间需要进行指令沟通,我们需要驱动程序来进行“翻译”;
低级语言:“汇编语言”
更趋近于硬件开发的工程师要学习“汇编语言”;而“汇编语言”被厂家所限制;
C语言,C++的底层就是汇编语言;
操作系统用来分配硬件资源
现在编程:基于高级语言,以及超高级语言,更好的让程序员能够实现编程功能。
编程的分类:
高级语言、超高级语言需要翻译成计算机可读的语言(二进制指令)
解释型语言 ---- 逐行翻译,逐行执行 shell,Python,Java
bash –x filename.sh
编译型语言 --- 一次编译,全部执行 大多是C语言,C++,C#,Java
Java既是解释型也是编译型
程序 = 指令 + 数据
面向对象 --- 侧重于数据的编程语言 Java里一切皆对象
面向过程 --- 侧重于指令
编程语言的执行方式:
要求:以行方式【一行一行】
1、 顺序执行
2、 循环执行
常用for(遍历),while(循环条件),until(和while相反)
3、 选择执行 -- 分支
if,重点case
2、shell脚本语言介绍
1、逻辑关系
2、变量
3、判断
优点:调用os(操作系统)的命令行,来实现所有功能;
缺点:没有库调用(区分)Python
shell脚本包括:
1、 命令(非常重要)
2、 变量(全局变量,局部变量,本地变量,传参)
shell的第一句话(必须写)
#!/bin/bash -- 定义脚本解释器(普遍认为#为注释行,这里特殊)shebang
#!/usr/bin/python – Python解释器
/etc/shells – 查看当前系统支持的shell程序
echo $SHELL – 查看当前会话的shell程序
/etc/passwd – 制定了用户默认支持的shell程序(/sbin/nologin)
shell 的执行:
1、bash命令来执行脚本
-n 查看shell脚本的逻辑错误(注意:单词写错不管)
-x 逐行显示执行的脚本程序(方便排错)
2、授权chmod u+x filename.sh
使用全路径执行脚本,即可
3、变量
环境变量
局部变量 declare 命令 -- 定义变量类型
本地变量 local 在函数中使用
变量类型:
数值型:
1、 整形 int
2、 浮点型 float
3、 布尔值 0 1(假 真)(True False)
字符串:
1、 普通字符及字符串
2、 数组
编程语言的分类:
强类型语言 – 数值必须被定义,才能进行处理或运算
弱类型语言 – 编程语言可以自动识别变量类型
【多态】
一个数据有多个属性,而最后使用的属性取决于和它进行运算的数据。
传参
$? -- 上一条命令的执行状态0正确 1-255错误
$1 -- $2…${10} -- 命令后面传入脚本的数据,以空格为分隔符
$# -- 统计传参数量${$#}
$* -- 表示所有的传参,所有的传参以字符串形式进行输出
[email protected] -- 表示所有的传参,将所有的传参以列表形式进行输出
【工作中要对所有的参数进行操作的时候,就要考虑$*和[email protected]】
定义变量格式:
NAME=YALUE (一个等号叫赋值,两个等号叫判断,相当于-eq)
我们通过命令declare定义变量类型
declare -i 整数 int() str()
declare -a 数组
变量命令:
1、 下划线的方式指定变量名称
2、 驼峰命名方式
4、test文件测试、条件判断
test命令[里面必须有空格]
在脚本中,我们需要进行语句分支 就是做判断
判断就是使用test命令来实现
使用格式:
1、test[option] file
2、[条件语句]
常见的test选项:
比较选项:
-eq 等于 数值用这个判断等于不等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
判断选项:
-e 判断文件是否存在
-f 判断是否为普通文件
-d 判断是否为目录文件
-L 判断是否为链接文件
-r -w –x 判断文件是否具有 读 写 执行的权限
关联选项:
-o 或
-a 与
! 非
字符串判断:
= 等于为真 字符串用这个判断是否相等
!= 不等于
-z 判断字符串长度是否为0 0就是假(判断是否存在)
-n 和-z相反 存在为假 不存在为真
5、逻辑运算
与 && 与运算 两边都真才是真,一边为假也是假
或 || 或运算 一边为真就是真,两边都假才是假
非 ! 非运算 真换假,假换真
示例:ls /var && exit0 || exit 1
这个逻辑运算符,前后对接的都是单独存在的命令;
[ $? –eq 0 ]&& exit 0 || exit 1
6、算术运算
重点:let 1+1
expr 1*1
重点:$[] $[1+10]
$(()) $(($1/$2))
算数运算符: