介绍
Shell 比较运算主要用于条件判断(if、while 等语句),用来判断数字大小、字符串是否相等、文件属性等。
Shell 分两种核心比较场景:整数比较、字符串比较,还有文件测试,用法完全不同,千万不能混用(比如用字符串语法比数字会出错)。
整数比较(最常用)
专门用于 数字大小判断,语法:
[ 整数1 操作符 整数2 ]
注意:[ 后面、] 前面必须有空格!
整数比较操作符
| 操作符 | 含义 | 示例 |
|---|---|---|
-eq |
等于 (equal) | [ $a -eq $b ] |
-ne |
不等于 (not equal) | [ $a -ne $b ] |
-gt |
大于 (greater than) | [ $a -gt $b ] |
-lt |
小于 (less than) | [ $a -lt $b ] |
-ge |
大于等于 (greater equal) | [ $a -ge $b ] |
-le |
小于等于 (less equal) | [ $a -le $b ] |
整数比较示例
#!/bin/bash
a=10
b=5
# 执行比较
[ $a -gt $b ]
# 把结果赋值给变量 res
res=$?
echo "比较结果:$res" # 输出 0(真)
使用$()
res=$([ 10 -gt 5 ])
echo $res # 0
字符串比较
用于判断 文本是否相同、是否为空,语法:
[ "字符串1" 操作符 "字符串2" ]
提示:字符串建议加双引号,防止空格导致报错。
字符串比较操作符
| 操作符 | 含义 | 示例 |
|---|---|---|
= |
相等 | [ "$str1" = "$str2" ] |
!= |
不相等 | [ "$str1" != "$str2" ] |
-z |
字符串长度为 0(空) | [ -z "$str" ] |
-n |
字符串长度不为 0 | [ -n "$str" ] |
字符串比较示例
#!/bin/bash
str1="hello"
str2="world"
str3=""
if [ "$str1" = "$str2" ]; then
echo "相等"
else
echo "不相等"
fi
if [ -z "$str3" ]; then
echo "str3 是空字符串"
fi
if [ -n "$str1" ]; then
echo "str1 非空"
fi
高级:(( )) 数字比较(推荐简写)
Bash 支持 (( )),可以直接用数学符号比数字,更直观:
(( a > b )) # 大于
(( a < b )) # 小于
(( a == b )) # 等于
(( a != b )) # 不等于
例子
res=$((10 > 5))
echo $res # 1(真)
res=$((10 < 5))
echo $res # 0(假)
例子2
#!/bin/bash
a=10
b=5
if (( a > b )); then
echo "$a > $b"
fi
注意事项
[和 内容之间必须有空格
错误:[$a -gt $b]
正确:[ $a -gt $b ]整数和字符串语法不能混用
比数字用-gt/-lt/-eq,比字符串用=/!=。字符串变量建议加双引号
防止变量为空或包含空格报错:[ "$str" = "abc" ]
总结
- 整数比较:
-eq、-ne、-gt、-lt、-ge、-le - 字符串比较:
=、!=、-z、-n - 文件判断:
-e、-f、-d、-r、-w、-x - 简写数字判断:
(( ))直接用> < == !=