介绍
整数比较只能对比数字,不能直接比较字符串
有下面三种写法,语法不一样,很容易混淆:
[][[]](( ))
适用:bash/sh,整数(int),不是浮点数(小数不能直接比较)
三种常用语法总览
| 写法 | 整数比较运算符 | 特点 | ||
|---|---|---|---|---|
[ 表达式 ] (POSIX 标准,兼容所有sh) |
-eq -ne -gt -ge -lt -le |
必须空格;不能用 > <(会被当成重定向) |
||
[[ 表达式 ]](bash扩展) |
-eq -ne -gt -ge -lt -le |
容错更好,支持逻辑&& \ | \ | ,但>默认是字符串比较 |
(( 表达式 ))(bash算术运算,最推荐整数比较) |
== != > >= < <= |
类C语法,直观,不需要 - 开头参数 |
写法一:[ ] / [[ ]] 用法
整数比较符号含义
| 参数 | 英文全称 | 含义 |
|---|---|---|
-eq |
equal | 等于 == |
-ne |
not equal | 不等于 != |
-gt |
greater than | 大于 > |
-ge |
greater or equal | 大于等于 >= |
-lt |
less than | 小于 < |
-le |
less or equal | 小于等于 <= |
重点:[ $a > $b ] 在单中括号里,不是大于,而是文件重定向!一定要写 -gt
例子:[ ] POSIX 写法(可移植)
注意:[ 是命令,前后必须有空格,变量建议双引号 "$var" 防止空值报错
#!/bin/bash
a=10
b=20
if [ "$a" -eq "$b" ]; then
echo "a等于b"
fi
if [ "$a" -ne "$b" ]; then
echo "a不等于b"
fi
if [ "$a" -gt "$b" ]; then
echo "a大于b"
fi
if [ "$a" -ge "$b" ]; then
echo "a大于等于b"
fi
if [ "$a" -lt "$b" ]; then
echo "a小于b"
fi
if [ "$a" -le "$b" ]; then
echo "a小于等于b"
fi
例子:[[ ]] bash 双中括号
[[ ]] 是bash内置,容错更强,支持 && || 直接写在里面,整数依旧用 -eq/-gt
注意:适用于bash
a=10
b=20
if [[ $a -lt $b && $b -le 30 ]]; then
echo "满足条件"
fi
注意:[[ $a > $b ]] 不加 - 时,是字符串字典序比较,不是数字!
例:[[ 100 > 20 ]] 字符串比较结果为 false,因为字符1<2,这是高频踩坑点。
写法二:(( )) 双圆括号
整数比较首选,类C语法
只在bash可用,专门做算术运算与整数判断,直接用 > < >= <= == !=,不用 -eq 那套。
变量可以不加 $。
a=10
b=20
if (( a == b )); then
echo "相等"
fi
if (( a != b )); then
echo "不等"
fi
if (( a > b )); then
echo "a大于b"
fi
if (( a >= 5 && b <= 30 )); then
echo "复合条件"
fi
✅ 优点:写法直观,符合编程习惯;
❌ 缺点:不是POSIX标准,sh 不支持,只能bash。
逻辑组合(多条件)
[]用法
[ ] 里面:-a 并且,-o 或者;推荐外面用 && ||
# 推荐写法
if [ "$a" -gt 5 ] && [ "$a" -lt 20 ]; then
echo "5 < a <20"
fi
[[]]用法
[[ ]] 里面:&& 并且,|| 或者
if [[ $a -gt 5 && $a -lt 20 ]]; then
echo "5 < a <20"
fi
(())用法
(( )) 里面:&& 并且,|| 或者
if (( a >5 && a <20 )); then
echo "5 < a <20"
fi
常见坑点总结
1. 整数 vs 字符串比较区分
[ ]/[[ ]]:-eq/-gt→ 数字;><→ 字符串比较(( )):全部是算术整数比较# 坑示例 [[ 100 > 20 ]] # 字符串比较:字符'1' < '2' → false (( 100 > 20 )) # 整数比较 → true2. 变量为空/未定义
a="" [ $a -gt 5 ] # 报错!空值,建议 [ "$a" -gt 5 ] 加引号3. 不能比较小数
shell原生只支持整数,小数比较要用awk/bc# bc 比较浮点数示例 a=3.5 b=2.1 if (( $(echo "$a > $b" | bc -l) )); then echo "a更大" fi4. 空格!空格!
[ 1 -eq 2 ]空格不能少;[1 -eq 2]直接语法错误。
选型建议
- 脚本要兼容
/bin/sh,跨多种Linux:用[ ]+-eq/-gt - 只跑bash,代码简洁写整数判断:优先
(( )) - 混合字符串+整数判断:
[[ ]]
企业使用
- 老脚本、传统运维脚本:大量用
[ ]+-eq/-gt/-lt - 新脚本、开发人员写的脚本:优先
(( )) [[ ]]字符串比较强,整数比较一般不用它。