1.

注意运算符也有空格

[ 1 -eq 1 ]

[[ 1 -eq 1 ]]

test 1 -eq 1 ,等同于[]

2.

-z 字符串长度等于0为真

-n 字符串长度不等于0为真

str 字符串存在为真。如VAR=1;VAR2=""。[ $VAR1 ] 为true [ $VAR2 ] 为false

需要注意的是,使用-z或者-n判断字符串长度时,变量要加双引号。即[ -z "$a" ]。但使用了双中括号就不用双引号[[ -n $a ]]

3.

文件测试

-e 文件或目录存在为真

-s 文件存在并且大小大于0为真

4.

布尔运算符

! 非关系

-a 和关系,在[]中使用

-o 或关系,在[]中使用

5.

逻辑判断符

&& 逻辑和,在[[]]和(())表达式中或判断表达式是否为真时使用

|| 逻辑或,在[[]]和(())表达式中或判断表达式是否为真时使用

6.

整数运算

$((1+1))

$[1+1]

注:上面两个都不支持浮点运算

$(())表达式还有一个用途,三目运算:$((2>1?1:0))注意返回值不支持字符串

7.

其它运算工具(let/expr/bc)

let赋值并运算,支持++、-- ,使用变量不加$,运算符两边不用加空格

expr 乘法*需要加反斜杠转义\*,运算两边必须加空格

bc计算器,支持浮点运算、平方等

[root@study ~]# echo 1+2|bc
3
[root@study ~]# echo '1.2+2'|bc
3.2
[root@study ~]# echo '10*10'|bc
100
[root@study ~]# echo '10^10'|bc
10000000000
#scale=2;表示用scale保留两位小数点
[root@study ~]# echo 'scale=2;10/3'|bc
3.33

8.

expr还可以对字符串操作

[root@study ~]# expr length "string"
6
[root@study ~]# expr substr "string" 4 6
ing
#查找字符串str出现的位置
[root@study ~]# expr index "string" str
1
[root@study ~]# expr index "string" ing
4
#获取字符串开始字符出现的长度
[root@study ~]# expr match "string" s.*
6
[root@study ~]# expr match "string" s*i
0
[root@study ~]# expr match "string" s.*i
4
[root@study ~]# expr match "string" str
3

9.

shell括号用途总结

shell表达式与运算符_字符串

10.

条件表达式用冒号,冒号在Shell中的意思是不做任何操作,但状态是0,因此为true