Skip to content

LV050-运算符

一、运算符

shell 支持很多运算符,包括算数运算符关系运算符布尔运算符字符串运算符文件测试运算符。原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr , expr 最常用,它是一款表达式计算工具,使用它能完成表达式的求值操作。

1. 算术运算符

运算符说明实例(设变量a=6, b=3)
+加法 expr $a + $b 结果为 9
-减法 expr $a - $b 结果为 3
*乘法,注意要加 \ expr $a \* $b 结果为 18
/除法 expr $a / $b 结果为 2
%取余 expr $b % $a 结果为 0
=赋值a=$b 把变量 b 的值赋给 a
==相等,比较两个数字,相同则返回 true[ $a == $b ] 返回 false
!=不相等,比较两个数字,不相同则返回 true[ $a != $b ] 返回 true
【注意】

(1)表达式和运算符之间要有空格,例如 a+b 是不对的,必须写成 $a + $b 。

(2)使用 expr 时,完整的表达式要被 ` 包含。

(3)赋值操作时, = 两端不能有空格。

(4)条件表达式要放在方括号之间,并且与方括号之间要有空格,例如: [a==b] 是错误的,必须写成 [ $a == $b ] 。

(5)乘号( * )前边必须加反斜杠( \ )才能实现乘法运算。

2. 关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

运算符说明实例(设变量a=6, b=3)
-eq相等==[ $a -eq $b ] 返回 false
-ne不相等!=[ $a -ne $b ] 返回 true
-gt大于>[ $a -gt $b ] 返回 true
-lt小于<[ $a -lt $b ] 返回 false
-ge大于等于>=[ $a -ge $b ] 返回 true
-le小于等于<=[ $a -le $b ] 返回 false
### 3. 布尔运算符
运算符说明实例(设变量a=6, b=3)
!![ ! false ] 返回 true
-o|[ $a -lt 7 -o $b -gt 10 ] 返回 true
-a&[ $a -lt 7 -o $b -gt 10 ] 返回 false
### 4. 逻辑运算符
运算符说明实例(设变量a=6, b=3)
&&逻辑的 and [[ $a -lt 10 && $b -gt 10 ]] 返回 false
||逻辑的 or [[ $a -lt 10 || $b -gt 10 ]] 返回 true

5. 字符串运算符

运算符说明实例(设变量a="abc", b="abd")
=检测两个字符串是否相等,相等返回 true[ $a = $b ] 返回 false
!=两个字符串是否不相等,不相等返回 true[ $a != $b ] 返回 true
-z字符串长度是否为0,为0返回 true[ -z $a ] 返回 false
-n字符串长度是否不为 0,不为 0 返回 true[ -n $a ] 返回 true
$字符串是否为空,不为空返回 true[ $a ] 返回 true
### 6. 文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性

运算符说明
-b file检测文件是否是块设备文件,如果是,则返回 true。
-c file检测文件是否是字符设备文件,如果是,则返回 true。
-d file检测文件是否是目录,如果是,则返回 true。
-f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。
-g file检测文件是否设置了 SGID 位,如果是,则返回 true。
-k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。
-p file检测文件是否是有名管道,如果是,则返回 true。
-u file检测文件是否设置了 SUID 位,如果是,则返回 true。
-r file检测文件是否可读,如果是,则返回 true。
-w file检测文件是否可写,如果是,则返回 true。
-x file检测文件是否可执行,如果是,则返回 true。
-s file检测文件是否为空(文件大小是否大于0),不为空返回 true。
-e file检测文件(包括目录)是否存在,如果是,则返回 true。
-L file检测测文件是否为符号链接,如果是,则返回 true。
file1 -nt file2测试文件 file1 是否比文件 file2 更新。
file1 -ot file2测试文件 file1 是否比文件 file2 更旧。