Shell和其他编程语言一样,支持多种运算符,包括:
(1)算数运算符
(2)关系运算符
(3)布尔运算符
(4)逻辑运算符
(5)字符串运算符
(6)文件测试运算符
1. 算数运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如awk和expr
expr是一款表达式计算工具,使用它能完成表达式的求值操作。
val=`expr 2 + 2` // 表达式和运算符之间要有空格。
假设a=10,b=20
`expr $a + $b` // 30
`expr $a - $b` // -10
`expr $a \* $b` // 200
`expr $b / $a` // 2
`expr $b % $a` // 0
a=$b // b赋值给a
[ $a == $b ] // false
[ $a != $b ] // true
2. 关系运算符
只支持数字,不支持字符串,除非字符串的值是数字。
-eq 是否相等
-ne 是否不相等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
---------------
a=10,b=30
[ $a -gt $b]
---------------
3. 布尔运算符
! 非运算符
-o 或运算
-a 与运算
---------------
a=10,b=30
[ $a -gt $b -a $b -gt 15]
---------------
4. 逻辑运算符
&& AND
|| OR
---------------
a=10,b=30
[[ $a -gt $b && $b -gt 15]]
---------------
5. 字符串运算符
= 两个字符串是否相等 //[ $a = $b ]
!= 两个字符串是否不相等 //[ $a != $b ]
-z 字符串长度是否为0 //[ -z $a ]
-n 字符串长度是否不为0 //[ -n "$a" ]
$ 字符串是否不为空 //[ $a ]
6. 文件测试运算符
文件测试运算符用于检测Unix文件的各种属性。
-b file 文件是否是块设备文件
-c file 文件是否是字符设备文件
-d file 文件是否是目录
-f file 文件是否是普通文件(既不是目录,也不是设备文件)
-r file 文件是否可读
-w file 文件是否可写
-x file 文件是否可执行
-s file 文件是否为空(文件大小是否大于0)
-e file 文件(包括目录)是否存在
-S file 文件是否是Socket
-L file 文件是否存在并且是一个符号链接