linux中判断变量大小关系需用整数比较运算符:[ ]中用-eq/-gt等字符串运算符且空格不可省,(( ))中可用>、==等c风格符号;必须校验变量为有效整数,否则报错。

Linux 中判断变量大小关系,核心是用整数比较运算符配合 [ ] 或 (( )) 语法。关键点在于:必须确保变量是整数、空格不能省、返回值为 0 表示条件成立(真),非 0 表示不成立(假)。
数字比较要用专用运算符
在 [ ] 中,不能用 >、、<code>== 这类 C 风格符号来比数字——它们会被 shell 当作重定向或语法错误处理。必须使用以下字符串形式的运算符:
-
-eq:等于(例如[ $a -eq $b ]) -
-ne:不等于 -
-gt:大于(greater than) -
-lt:小于(less than) -
-ge:大于等于 -
-le:小于等于
注意:中括号两端和每个参数之间都必须有空格,否则会报错或行为异常。比如 [$a-gt$b] 是非法的,正确写法是 [ $a -gt $b ]。
推荐用 (( )) 简化写法
如果只做纯数值比较(不含字符串或文件测试),(( )) 更直观,支持常见数学符号:
-
(( a > b ))—— 大于 -
(( a == b ))—— 等于(注意是双等号,单等号=是赋值) -
(( a != b ))—— 不等于 (( a —— 小于等于
它的优势是语法接近常规编程,且自动把变量当数字处理(无需额外校验类型),但仅限整数——浮点数仍不支持,会报错。
实际判断逻辑要覆盖所有分支
单纯比较两个数,通常需要三路判断:大于、小于、等于。用 if/elif/else 组合最稳妥:
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
也可以用 (( )) 写得更紧凑:
if (( a > b )); then echo "$a 大于 $b" elif (( a <h3>务必提前校验变量是否为有效整数</h3> <p>如果变量含字母、空格或为空,<code>[ $a -gt $b ]</code> 会报错:<code>integer expression expected</code>。安全做法是先检查:</p>
- 用
[[ $a =~ ^-?[0-9]+$ ]] && [[ $b =~ ^-?[0-9]+$ ]]判断是否为整数(含负数) - 或用
expr $a + 0 &> /dev/null测试能否参与算术运算 - 空变量建议用引号包裹再判断,如
[ -z "$a" ]防止展开为空导致语法错误
不验证就直接比较,脚本容易在边界情况下意外退出。











