条件运算符
Tutorial: Conditions in bash scripting
数学运算
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
|
|
注意:
- 表达式和运算符之间要有空格,例如 1+2 是不对的,必须写成 1 + 2
- 完整的表达式要被 ` ` 包含。
另外,使用 $(()) 可对表达式进行简单计算
|
|
另外,还可使用 let 命令
算术运算符
下表列出了常用的算术运算符,假定变量 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。==
相等。用于比较两个数字,相同则返回 true。[ $a == $b ]
返回 false。!=
不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ]
返回 true。
注意:
- 乘号
*
前边必须加反斜杠\
才能实现乘法运算; - 条件表达式要放在方括号之间,并且要有空格,例如:
[$a==$b]
是错误的,必须写成[ $a == $b ]
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:
使用 [] 注意:[] 与操作符之间要有空格,使用变量需使用 $
-eq
检测两个数是否相等;[ $a -eq $b ]
返回 false。-ne
检测两个数是否相等;[ $a -ne $b ]
返回 true。-gt
检测左边的数是否大于右边的;[ $a -gt $b ]
返回 false。-lt
检测左边的数是否小于右边的;[ $a -lt $b ]
返回 true。-ge
检测左边的数是否大等于右边的;[ $a -ge $b ]
返回 false。-le
检测左边的数是否小于等于右边的;[ $a -le $b ]
返回 true。==
、!=
也是可用的
使用 (()) 注意:(()) 与操作符之间可以没有空格,使用变量可以不使用 $
==
等于,如:(( a == b ))
!=
不等于,如:(( a != b ))
<
小于,如:(( a < b ))
<=
小于等于,如:(( a <= b ))
>
大于,如:(( a > b ))
>=
大于等于,如:(( a >= b ))
布尔运算符
下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:
!
非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ]
返回 true。-a
与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ]
返回 false。-o
或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ]
返回 true。
逻辑运算符
以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:
&&
逻辑的 AND[[ $a -lt 100 && $b -gt 100 ]]
或[ $a -lt 100 ] && [ $b -gt 100 ]
返回 false- 注意与布尔运算符
-a
的区别:需要使用双 [[]] - 推荐使用
[ $a -lt 100 ] && [ $b -gt 100 ]
,因为结构更清晰
- 注意与布尔运算符
||
逻辑的 OR[[ $a -lt 100 || $b -gt 100 ]]
或[ $a -lt 100 ] || [ $b -gt 100 ]
返回 true- 注意与布尔运算符
-o
的区别:需要使用双 [[]]
- 注意与布尔运算符
字符串运算符
下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:
=
、或==
检测两个字符串是否相等,[ $a = $b ]
返回 false!=
检测两个字符串是否不相等,[ $a != $b ]
返回 true-z
检测字符串长度是否为0,[ -z $a ]
返回 false-n
检测字符串长度是否不为0,[ -n $a ]
返回 truestr
检测字符串是否不为空,[ $a ]
返回 true
文件测试运算符
文件测试运算符用于检测 Unix 文件的各种属性。常见属性检测描述如下:
-d file
检测文件是否是目录,如果是,则返回 true。[ -d $file ]
返回 false。-f file
检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。[ -f $file ]
返回 true。-r file
检测文件是否可读,如果是,则返回 true。[ -r $file ]
返回 true。-w file
检测文件是否可写,如果是,则返回 true。[ -w $file ]
返回 true。-x file
检测文件是否可执行,如果是,则返回 true。[ -x $file ]
返回 true。-s file
检测文件是否为空(文件大小是否大于0),不为空返回 true。[ -s $file ]
返回 true。-e file
检测文件(包括目录)是否存在,如果是,则返回 true。[ -e $file ]
返回 true。