Linux中比较两个整数大小需用if语句配合方括号内的整数比较操作符(如-eq、-gt等),变量须用$引用且方括号内外必须有空格,不支持浮点数。

Linux中比较两个整数大小,主要靠 if 语句配合方括号 [ ] 内的数值比较操作符实现。注意:这些操作符只支持整数,不支持小数;变量需用 $ 引用,且方括号与内部内容之间必须有空格。
常用整数比较操作符
这些操作符写在方括号内,格式为 [ $a -op $b ],其中 -op 是以下之一:
- -eq:等于(equal)
- -ne:不等于(not equal)
- -gt:大于(greater than)
- -lt:小于(less than)
- -ge:大于或等于(greater or equal)
- -le:小于或等于(less or equal)
基本写法示例
以判断变量 a=15 和 b=8 为例:
#!/bin/bash a=15 b=8 if [ $a -gt $b ]; then echo "$a 大于 $b" elif [ $a -eq $b ]; then echo "$a 等于 $b" else echo "$a 小于 $b" fi
运行结果为:15 大于 8。注意:if 后的条件表达式两端的空格不能省,否则会报错“unexpected operator”或“integer expression expected”。
常见易错点提醒
- 浮点数不能用
-gt、-eq等比较——Shell 原生命令不支持小数运算,会提示integer expression expected;需改用bc、awk或printf配合字符串比较等替代方案 - 变量未定义或为空时,可能导致语法错误;建议先用
[ -z "$var" ]判断是否为空,或给变量设默认值(如${a:-0}) - 使用
test命令效果相同,例如test $a -gt $b等价于[ $a -gt $b ] - 逻辑组合可用
&&(且)、||(或),例如[ $a -ge 10 ] && [ $a -le 20 ]判断是否在闭区间内
结合退出状态理解更可靠
每次 [ ] 执行后,Shell 会把结果存入特殊变量 $?:
- 返回 0 表示条件成立(true)
- 返回非 0(通常是 1)表示不成立(false)
可手动验证:[ 5 -lt 3 ]; echo $? 输出 1;[ 5 -gt 3 ]; echo $? 输出 0。这是 if 能工作的底层依据。


















