在 Linux Shell 脚本中,关系运算符主要用于数值比较和字符串比较。以下是常见的分类和示例:
(用于 []
或 test
命令时用特定符号,(())
或 [[]]
中可用数学符号)
运算符 | 描述 | 示例 |
---|---|---|
-eq |
等于 | [ $a -eq $b ] |
-ne |
不等于 | [ $a -ne $b ] |
-gt |
大于 | [ $a -gt $b ] |
-ge |
大于或等于 | [ $a -ge $b ] |
-lt |
小于 | [ $a -lt $b ] |
-le |
小于或等于 | [ $a -le $b ] |
(())
中的数学符号(推荐在算术运算中使用):
if (( a == b )); then # 注意是 ==
if (( a > b )); then
(建议在 [[]]
中使用,避免特殊字符问题)
运算符 | 描述 | 示例 |
---|---|---|
= 或 == |
字符串相等 | [[ "$str1" == "$str2" ]] |
!= |
字符串不相等 | [[ "$str1" != "$str2" ]] |
> |
按字典顺序大于 | [[ "$str1" > "$str2" ]] |
< |
按字典顺序小于 | [[ "$str1" < "$str2" ]] |
-z |
字符串长度为0(空) | [ -z "$str" ] |
-n |
字符串长度非0(非空) | [ -n "$str" ] |
(虽然不是严格的关系运算符,但常用于条件判断)
运算符 | 描述 | 示例 |
---|---|---|
-e |
文件/目录是否存在 | [ -e "/path" ] |
-f |
是普通文件 | [ -f "/path" ] |
-d |
是目录 | [ -d "/path" ] |
-r |
可读 | [ -r "/path" ] |
-w |
可写 | [ -w "/path" ] |
-x |
可执行 | [ -x "/path" ] |
-s |
文件大小大于0 | [ -s "/path" ] |
(组合多个条件)
运算符 | 描述 | 示例 |
---|---|---|
! |
非 | [ ! -f "/path" ] |
-a |
与(AND) | [ $a -eq 1 -a $b -eq 2 ] (已过时) |
-o |
或(OR) | [ $a -eq 1 -o $b -eq 2 ] (已过时) |
&& |
逻辑与 | [[ $a -eq 1 && $b -eq 2 ]] |
|| |
逻辑或 | [[ $a -eq 1 || $b -eq 2 ]] |
[ $a -eq $b ]
方括号内必须保留空格。-eq
是数值比较,==
是字符串比较。推荐使用 [[]]
:比 []
更安全,支持 &&
、||
和模式匹配。
if [[ "$str" == "Linux" && $num -gt 10 ]]; then
避免未定义变量:在 []
或 [[]]
中引用变量时建议加双引号,如 "$var"
。
#!/bin/bash
a=10
b=20
# 数值比较
if [ $a -lt $b ]; then
echo "a < b"
fi
# 字符串比较
str1="hello"
if [[ "$str1" == "hello" ]]; then
echo "字符串匹配"
fi
# 文件检查
if [ -f "/etc/passwd" ]; then
echo "文件存在"
fi
掌握这些运算符能高效编写 Shell 脚本中的条件逻辑。