条件运算符
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。