Linux Shell中比较整数大小需用-gt、-lt等专用运算符配合[ ]或(( )),不可直接用>

Linux Shell 中比较两个整数大小,核心是使用专门的整数比较运算符,配合 [ ] 或 (( )) 语法结构。关键不是用 > 或 直接比(那是字符串或重定向符号),而是用 <code>-gt、-lt 这类专用于整数的选项。
用 [ ] 比较整数(最常用)
[ ] 是 test 命令的简写,必须注意:方括号前后都要有空格,变量建议加双引号防空值或含空格情况。
-
[ "$a" -eq "$b" ]:判断是否相等 -
[ "$a" -gt "$b" ]:判断a是否大于b -
[ "$a" -lt "$b" ]:判断a是否小于b -
[ "$a" -ge "$b" ]:大于等于 -
[ "$a" -le "$b" ]:小于等于 -
[ "$a" -ne "$b" ]:不等于
示例:
#!/bin/bash
a=15
b=8
if [ "$a" -gt "$b" ]; then
echo "$a 大于 $b"
elif [ "$a" -lt "$b" ]; then
echo "$a 小于 $b"
else
echo "$a 等于 $b"
fi
用 (( )) 进行算术比较(更简洁)
(( )) 是 Bash 的算术计算上下文,支持 C 风格的比较符号,且自动把变量当数字处理,无需加引号(但变量未定义时会出错,仍建议先校验)。
-
(( a > b )):大于 -
(( a == b )):等于(注意是两个等号) -
(( a != b )):不等于 (( a :小于等于
示例:
if (( a > b )); then
echo "a 更大"
fi
输入校验很重要
直接拿用户输入或参数做比较前,得确认它们真是整数,否则 [ 12a -gt 5 ] 会报错或行为异常。
- 用
expr "$input" + 0 &>/dev/null测试能否参与算术运算 - 或用正则:
[[ "$input" =~ ^-?[0-9]+$ ]](支持负数) - 脚本开头可加参数个数检查:
[ $# -ne 2 ] && { echo "用法:$0 num1 num2"; exit 1; }
常见错误提醒
别混用字符串和整数比较:用 = 或 == 在 [ ] 里是比较字符串,不是数值;[ "05" = "5" ] 是 false,但 [ 05 -eq 5 ] 是 true。
别漏空格:[1-gt2] 是无效命令,必须是 [ 1 -gt 2 ]。
别在 [ ] 里用 :它们会被 shell 当作重定向,要转义成 \ 或改用 <code>(( ))。


















