ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 算术运算符 下表列出了常用的算术运算符,假定变量 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 | 检测两个数是否相等,相等返回 true。 | \[ $a -eq $b \] 返回 false。 | | \-ne | 检测两个数是否不相等,不相等返回 true。 | \[ $a -ne $b \] 返回 true。 | | \-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | \[ $a -gt $b \] 返回 false。 | | \-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | \[ $a -lt $b \] 返回 true。 | | \-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | \[ $a -ge $b \] 返回 false。 | | \-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | \[ $a -le $b \] 返回 true。 | ## 布尔运算符 下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20: | 运算符 | 说明 | 举例 | | --- | --- | --- | | ! | 非运算,表达式为 true 则返回 false,否则返回 true。 | \[ ! false \] 返回 true。 | | \-o | 或运算,有一个表达式为 true 则返回 true。 | \[ $a -lt 20 -o $b -gt 100 \] 返回 true。 | | \-a | 与运算,两个表达式都为 true 才返回 true。 | \[ $a -lt 20 -a $b -gt 100 \] 返回 false。 | ## 逻辑运算符 以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20: | 运算符 | 说明 | 举例 | | --- | --- | --- | | && | 逻辑的 AND | \[\[ $a -lt 100 && $b -gt 100 \]\] 返回 false | | || | 逻辑的 OR | \[\[ $a -lt 100 || $b -gt 100 \]\] 返回 true | ## 字符串运算符 下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg": | 运算符 | 说明 | 举例 | | --- | --- | --- | | \= | 检测两个字符串是否相等,相等返回 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。 | ## 文件测试运算符 文件测试运算符用于检测 Unix 文件的各种属性。 属性检测描述如下: | 操作符 | 说明 | 举例 | | --- | --- | --- | | \-b file | 检测文件是否是块设备文件,如果是,则返回 true。 | \[ -b $file \] 返回 false。 | | \-c file | 检测文件是否是字符设备文件,如果是,则返回 true。 | \[ -c $file \] 返回 false。 | | \-d file | 检测文件是否是目录,如果是,则返回 true。 | \[ -d $file \] 返回 false。 | | \-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 | \[ -f $file \] 返回 true。 | | \-g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 | \[ -g $file \] 返回 false。 | | \-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 | \[ -k $file \] 返回 false。 | | \-p file | 检测文件是否是有名管道,如果是,则返回 true。 | \[ -p $file \] 返回 false。 | | \-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true。 | \[ -u $file \] 返回 false。 | | \-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。 | 其他检查符: * **\-S**: 判断某文件是否 socket。 * **\-L**: 检测文件是否存在并且是一个符号链接。 ### 实例 变量 file 表示文件**/var/www/runoob/test.sh**,它的大小为 100 字节,具有**rwx**权限。下面的代码,将检测该文件的各种属性: ## 实例 #!/bin/bash \# author:菜鸟教程 \# url:www.runoob.com file\="/var/www/runoob/test.sh" if\[\-r$file\] then    echo"文件可读" else    echo"文件不可读" fi if\[\-w$file\] then    echo"文件可写" else    echo"文件不可写" fi if\[\-x$file\] then    echo"文件可执行" else    echo"文件不可执行" fi if\[\-f$file\] then    echo"文件为普通文件" else    echo"文件为特殊文件" fi if\[\-d$file\] then    echo"文件是个目录" else    echo"文件不是个目录" fi if\[\-s$file\] then    echo"文件不为空" else    echo"文件为空" fi if\[\-e$file\] then    echo"文件存在" else    echo"文件不存在" fi 执行脚本,输出结果如下所示: ~~~ 文件可读 文件可写 文件可执行 文件为普通文件 文件不是个目录 文件不为空 文件存在 ~~~