在Linux的Shell脚本中,关系运算符主要用于数值和字符串的比较,不同运算符支持的类型有所不同。以下是详细分类:
适用类型:整数(Shell默认不支持浮点数比较,需借助bc
或awk
)
常用运算符:
- -eq
:等于(Equal)
bash
if [ $a -eq $b ]; then echo "Equal"; fi
- -ne
:不等于(Not Equal)
- -gt
:大于(Greater Than)
- -ge
:大于或等于(Greater or Equal)
- -lt
:小于(Less Than)
- -le
:小于或等于(Less or Equal)
示例:
if [ 10 -gt 5 ]; then
echo "10 is greater than 5"
fi
适用类型:文本字符串
常用运算符:
- =
或 ==
:等于(注意等号两边需有空格)
bash
if [ "$str1" = "$str2" ]; then echo "Match"; fi
- !=
:不等于
- -z
:检查字符串是否为空(Zero length)
- -n
:检查字符串是否非空(Non-zero length)
- >
和 <
:按字典顺序比较(需用[[ ]]
或在[ ]
中转义)
示例:
if [[ "apple" < "banana" ]]; then
echo "apple comes before banana"
fi
适用类型:文件/目录路径
常用运算符:
- -e
:文件是否存在(Exist)
bash
if [ -e "/path/to/file" ]; then echo "Exists"; fi
- -f
:是否为普通文件(File)
- -d
:是否为目录(Directory)
- -r
/-w
/-x
:是否可读/可写/可执行
- -s
:文件大小是否大于零
- -nt
/-ot
:文件是否比另一文件新/旧(Newer/Older Than)
示例:
if [ -d "/tmp" ]; then
echo "/tmp is a directory"
fi
适用类型:组合多个条件
常用运算符:
- !
:非(Not)
- -a
:与(And,在[ ]
中使用)
- -o
:或(Or,在[ ]
中使用)
- &&
和 ||
:逻辑与/或(需在[[ ]]
或命令组合中使用)
示例:
if [ $a -gt 5 -a $a -lt 10 ]; then
echo "a is between 5 and 10"
fi
[ ]
内,运算符和操作数之间必须有空格(如[ "$a" = "$b" ]
)。bc
):
bash
if [ $(echo "1.2 > 1.1" | bc) -eq 1 ]; then echo "True"; fi
[[ ]]
:支持更自然的语法(如&&
、||
)和通配符匹配(==
支持通配符)。#!/bin/bash
num1=10
str="hello"
file="/etc/passwd"
if [ $num1 -ge 10 ] && [ -f "$file" ]; then
echo "Number is 10+ and file exists."
fi
if [[ "$str" == h* ]]; then
echo "String starts with 'h'."
fi
掌握这些运算符后,可以灵活处理Shell脚本中的条件判断需求。