shell表达式与运算符

著论准过秦,作赋拟子虚。这篇文章主要讲述shell表达式与运算符相关的知识,希望能为你提供帮助。
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括号用途总结

10.
【shell表达式与运算符】条件表达式用冒号,冒号在Shell中的意思是不做任何操作,但状态是0,因此为true

    推荐阅读