在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脚本中的条件判断需求。