05 · 运算符

2026.10.08 · 🟡

目标:掌握六大类运算符,记住「空格」和「反引号」两个坑

🎯 今天要带走的三件事

  1. bash 不会算数学,要靠 expr、$(())、let
  2. 数字比较用 -eq -ne -gt -lt -ge -le,不是 > <
  3. 条件表达式方括号内必须留空格

一、算术运算符

⚠️ 原生 bash 不支持数学运算,需借助 expr、awk 等,expr 最常用。

val=`expr 2 + 2`     # 注意反引号 `,不是单引号 '
echo "两数之和为 : $val"   # 4

两点注意: - 运算符两侧必须有空格:2 + 2 ✅ | 2+2 ❌(跟多数语言不一样) - 完整表达式要用反引号包住

设 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 —
== 相等 [ $a == $b ] false
!= 不等 [ $a != $b ] true

乘号 * 前必须加反斜杠 \ 转义。 Mac 上语法不同:用 $((表达式)),* 无需转义。

二、关系运算符(只支持数字)

运算符 说明
-eq equal,相等
-ne not equal,不等
-gt greater than,大于
-lt less than,小于
-ge ≥
-le ≤
if [ $a -eq $b ]; then ... fi

⚠️ 关系运算符不支持字符串(除非字符串本身是数字)。

三、布尔运算符

运算符 说明
! 非
-o 或(or)
-a 与(and)
[ $a -lt 20 -o $b -gt 100 ]    # 或
[ $a -lt 20 -a $b -gt 100 ]    # 与

四、逻辑运算符(双括号 <span class="deadlink"></span>)

运算符 说明 举例
&& 逻辑与 <span class="deadlink">$a -lt 100 && $b -gt 100</span>
\|\| 逻辑或 <span class="deadlink">\| $b -gt 100</span>

区别:-a/-o 用于单方括号 [ ];&&/|| 用于双方括号 <span class="deadlink"></span>。

五、字符串运算符

设 a="abc",b="efg":

运算符 说明
= 字符串相等
!= 字符串不等
-z 长度为 0 则 true
-n 长度不为 0 则 true
$a 不为空则 true

六、文件测试运算符 ⭐

运算符 说明
-b 块设备文件
-c 字符设备文件
-d 目录
-f 普通文件
-g 设置了 SGID
-k 设置了粘着位
-p 有名管道
-u 设置了 SUID
-r 可读
-w 可写
-x 可执行
-s 非空(大小 > 0)
-e 存在
-S socket
-L 符号链接
file="/var/www/runoob/test.sh"
if [ -r $file ]; then echo "文件可读"; fi
if [ -d $file ]; then echo "是目录"; fi

七、自增/自减(Shell 无 ++/--,四种替代)

num=5
let num++              # 用 let
num=$((num + 1))       # 用 $(())
num=$(expr $num + 1)   # 用 expr
((num++))              # 用 (())

🌙 今日作业

  • [ ] 用 expr 和 $(()) 分别算 7 * 8
  • [ ] 判断 /etc/passwd 是否可读、是否为普通文件

自测题

  1. expr 2*3 会输出什么?为什么?
  2. 判断数字相等,[ $a == $b ] 和 [ $a -eq $b ] 哪个更稳妥?
  3. -z 和 -n 分别检测什么?
👉 参考答案 1. 不会输出 6。`*` 未转义会被 shell 当通配符展开,且运算符两侧无空格。正确写法 `expr 2 \* 3`。 2. 数字比较推荐 `-eq`(专为数值设计)。`==` 用于字符串比较,且在 `[ ]` 中做数值比较易踩坑(`` 或 `(( ))` 下才常用 `==`)。 3. `-z`:字符串长度是否为 0(zero);`-n`:长度是否不为 0(non-zero)。

🔗 关联

Shell-学习总览|上一课 → 04-传递参数|下一课 → 06-echo与printf