Linux 命令行入门教程
86. 比较与逻辑运算
本教程共 90 篇 · 第 86 篇
86. 比较与逻辑运算
上一章讲了 if 和条件框架,这章填进去”比什么、怎么连”。记住:数字和字符串的比较符号不一样。
数字比较
数字用 -eq -ne -gt -lt -ge -le,别用 = 和 >:
| 运算符 | 含义 |
|---|---|
-eq | 等于(equal) |
-ne | 不等于(not equal) |
-gt | 大于(greater than) |
-lt | 小于(less than) |
-ge | 大于等于 |
-le | 小于等于 |
if [ "$age" -ge 18 ]; then
echo "已成年"
fi
字符串比较
字符串用 =、!=,判断空用 -z / -n:
if [ "$name" = "小明" ]; then
echo "找到小明"
fi
if [ -z "$name" ]; then
echo "名字为空"
fi
Note在
[[ ]]里字符串相等也能写==,但为了和数字的-eq区分,建议字符串统一用=。
文件测试
判断文件属性最常用,搭配 if:
| 运算符 | 含义 |
|---|---|
-e | 文件存在 |
-f | 是普通文件 |
-d | 是目录 |
-r / -w / -x | 可读 / 可写 / 可执行 |
-s | 存在且非空 |
逻辑运算
把多个条件连起来,用 &&(且)和 ||(或)。在 [ ] 里写法是 -a / -o,但更推荐用外层连接:
# 且:两个条件都成立
[ "$age" -ge 18 ] && [ "$age" -le 60 ]
# 或:任一成立
[ "$role" = "admin" ] || [ "$role" = "root" ]
# 取反
! [ -f "$file" ]
组合进 if:
if [ "$age" -ge 18 ] && [ "$age" -le 60 ]; then
echo "适龄"
fi
[[ ]] 里还能直接写 && / ||,不用拆两条:
if [[ "$age" -ge 18 && "$age" -le 60 ]]; then
echo "适龄"
fi
小结:数字用 -eq/-gt 那套,字符串用 =/!=,文件用 -f/-d。多个条件用 &&/|| 串联,逻辑就清楚了。