首页 > 编程笔记

Shell运算符详解

Shell 支持多种运算符,包括算术运算符、关系运算符、布尔运算符、逻辑运算符、字符串运算符和文件测试运算符。

Shell算术运算符

常用的算术运算符及说明如表 1 所示。

表 1 常用算术运算符及说明
运算符 说明
+ 加法
- 减法
* 乘法
/ 除法
% 取余
= 赋值
= 相等。用于比较两个数字,相同则返回 true
!= 不相等。用于比较两个数字,不相同则返回 true

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

Shell关系运算符

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

常用的关系运算符及说明如表 2 所示。

表 2 常用关系运算符及说明
运算符 说 明
-eq 检测两个数是否相等,相等返回 true
-ne 检测两个数是否不相等,不相等返回 true
-gt 检测左边的数是否大于右边的,如果是,则返回 true
-It 检测左边的数是否小于右边的,如果是,则返回 true
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true
-le 检测左边的数是否小于等于右边的,如果是,则返回 true

例如当 a=10,b=10 时,命令如下:
if [ $a -eq $b ]
    then
    echo "$a -eq $b : a 等于 b"
    else
    echo "$a -eq $b: a 不等于 b"
    fi
    if [ $a -ne $b ]
    then
    echo "$a -ne $b: a 不等于 b"
    else
    echo "$a -ne $b : a 等于 b"
    fi
    if [ $a -gt $b ]
    then
    echo "$a -gt $b: a 大于 b"
    else
    echo "$a -gt $b: a 不大于 b"
    fi
    if [ $a -lt $b ]
    then
    echo "$a -lt $b: a 小于 b"
    else
    echo "$a -lt $b: a 不小于 b"
    fi
    if [ $a -ge $b ]
    then
    echo "$a -ge $b: a 大于或等于 b"
    else
    echo "$a -ge $b: a 小于 b"
    fi
    if [ $a -le $b ]
    then
    echo "$a -le $b: a 小于或等于 b"
    else
    echo "$a -le $b: a 大于 b"
    fi
输出结果如下所示:

10 -eq 20: a 不等于 b
10 -ne 20: a 不等于 b
10 -gt 20: a 不大于 b
10 -lt 20: a 小于 b
10 -ge 20: a 小于 b
10 -le 20: a 小于或等于 b

Shell布尔运算符

常用的布尔运算符及说明如表 3 所示。

表 3 常用布尔运算符及说明
运算符 说 明
! 非运算,表达式为 true 则返回 false,否则返回 true
-o 或运算,有一个表达式为 true 则返回 true
-a 与运算,两个表达式都为 true 才返回 true

Shell逻辑运算符

常用的逻辑运算符及说明如表 4 所示。

表 4 常用逻辑运算符及说明
运算符 说 明
&& 逻辑的 AND
II 逻辑的 OR

Shell字符串运算符

常用的字符串运算符及说明如表 5 所示。

表 5 常用字符串运算符及说明
运算符 说 明
= 检测两个字符串是否相等,相等返回 true
!= 检测两个字符串是否相等,不相等返回 true
-z 检测字符串长度是否为 0,为 0 返回 true
-n 检测字符串长度是否为 0,不为 0 返回 true
$ 检测字符串是否为空,不为空返回 true

Shell文件测试运算符

文件测试运算符用于检测 UNIX 文件的各种属性。常用的文件测试运算符及说明如表 6 所示。

表 6 常用文件测试运算符及说明
运算符 说 明
-b file 检测文件是否是块设备文件,如果是,则返回 true
-c file 检测文件是否是字符设备文件,如果是,则返回 true
-d file 检测文件是否存在且是目录,如果是,则返回 true
-f file 检测文件是否存在且是普通文件(既不是目录,也不是设备文件),如果是,则返回 true
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true
-h file 检测文件是否为链接文件
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true
-p file 检测文件是否是有名管道,如果是,则返回 true
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true
-r file 检测文件是否存在且可读,如果是,则返回 true
-w file 检测文件是否存在且可写,如果是,则返回 true
-x file 检测文件是否存在且可执行,如果是,则返回 true
-s file 检测文件是否存在且非空,不为空返回 true
-e file 检测文件(包括目录)是否存在,如果是,则返回 true

优秀文章