bash (Bourne-Again Shell)是一种过程式编程语言。
过程式编程语言3个特点:
顺序执行:一行一行运行
选择执行:判断测试条件,可能会有多个测试条件,满足则执行,不满足则跳过(如if语句)
循环执行:将同一段代码反复执行多次。因此,循环必须有退出条件,否则,则陷入死循环(for语句、while语句、until语句)
变量类型:本地变量、环境变量(export:导出)、局部变量、位置变量、特殊变量。
详解位置变量和特殊变量:
位置变量:位置变量就是运行脚本时附加的参数位置。$0表示:脚本本身;$1表示:脚本后的第一个参数。
一般位置变量有:$1,...,$n,${10}
特殊变量:脚本中不用赋值,可以直接使用的变量。
常用的有:
$?:状态返回值
$#: 传递给脚步参数的个数
$*: 引用传递给脚本的所有参数
$@:引用传递给脚本的所有参数
二、变量赋值:分直接赋值和增强型赋值
直接赋值:直接赋值的任何变量无需事先声明,可以直接使用。值默认都是字符型。
字符赋值:a=hello
整型变量:letVAR_NAME=INTEGER_VALUE如:let a=3
declare -i VAR_NAME=INTEGER_VALUE如:declare -ia=3
增强型赋值:就是赋值变量可以进行一些简单的运算
常用的运算符:+=,-=,*=,/=,%/,**=
如a=$[$a+1] 相当于 let a+=1
特殊自加型:var++,var--,++var, --var
如a++
变量撤销: unset:撤销赋值的变量值
运算:分算术、字符运算,逻辑运算,比较运算
算术、字符运算符:(bash会对数字执行隐式的类型转换)
+:加,字符加运算:a= 中 b=国 c=$a+$b echo $c 结果:中国
-:减
*:乘
/:除
%:取模,取余数5%2=1
**:次方, 2**3
实现bash算术运算的方式:
letVAR_NAME=ARITHMATIC_EXPRESSION
VAR_NAME=$[ARITHMATIC_EXPRESSION]
VAR_NAME=$((ARITHMATIC_EXPRESSION))
VAR_NAME=$(expr$num1+$num2)
逻辑运算:又叫布尔运算,与(乘)、或(加)、非、异或算
与运算:&&
真 && 真 =真
真 && 假 =假
假 && 真 =假
假 && 假 =假
或运算:||
真 || 真 =真
真 || 假 =真
假 || 真 =真
假 || 假 =假
非运算:!
!真=假
!假=真
异或运算:^
比较运算:就是用命令执行成功与否做为条件判断。分整数比较,字符串比较,文件比较(判断文件的存在性及属性等)。注意:比较运算通常只在同一种类型间进行
表达式格式: testEXPR, [ EXPR ], ` EXPR `
运算符有:
<:小于
>:大于
<=:小于等于
>=:大于等于
==:等于
!= :不等于
=~:字串测试中模式匹配
例: [["$var"=~ PATTERN ]]
[["$var" =~ [cC][pP][uU]]]
整数比较:
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于
-eq:等于
-ne:不等于
字符串比较:分双目比较和单目比较
双目:
<:小于
>:大于
<=:小于等于
>=:大于等于
==:等于
!= :不等于
单目:
-nstring: 是否不空,不空则为真,空则假
-zstring: 是否为空,空则为真,不空则假
文件比较:
单目:
-a file或-e file:文件存在则为真,否则为假
-f file: 存在并且为普通文件,则为真,否则为假
-d file: 存在并且为目录文件,则为真,否则为假
-L或-h file:文件存在并且为软链接文件,则为真,否则为假
-b file:存在并且为块设备文件,则为真,否则为假
-c file:存在并且为字符设备文件,则为真,否则为假
-p file:存在并且为命令管道文件设备文件,则为真,否则为假
-S file:存在并且为套接字文件设备文件,则为真,否则为假
-s FILE: 存在并且为非空文件则为值,否则为假;
-r file: 存在可读
-w file: 存在可写
-x file: 存在可执行
file1 -nt file2:file1的mtime新于file2则为真,否则为假
file1 -ot file2:file1的mtime旧于file2则为真,否则为假
file1 -ef file2: file1和 file2 指向相同的设备和节点号则为真,否则为假
组合条件测试:在多个条件间实现逻辑运算
与:[condition1 -a condition2 ] 如果condition1和 condition2全真则为真。
condition1 &&condition2
或:[condition1 -o condition2 ] 如果condition1或者condition2为真则为真。
condition1 ||condition2
非:[ -notcondition ] 如果condition是false则为真。
! condition