在Linux shell脚本中,关系运算符用于比较两个值之间的关系,通常用于条件判断语句中。以下是常用的关系运算符分类和说明:
用于比较整数数值:
-eq
:等于 (Equal)
if [ $a -eq $b ]; then
echo "$a 等于 $b"
fi
-ne
:不等于 (Not Equal)
if [ $a -ne $b ]; then
echo "$a 不等于 $b"
fi
-gt
:大于 (Greater Than)
if [ $a -gt $b ]; then
echo "$a 大于 $b"
fi
-lt
:小于 (Less Than)
if [ $a -lt $b ]; then
echo "$a 小于 $b"
fi
-ge
:大于等于 (Greater or Equal)
if [ $a -ge $b ]; then
echo "$a 大于等于 $b"
fi
-le
:小于等于 (Less or Equal)
if [ $a -le $b ]; then
echo "$a 小于等于 $b"
fi
用于比较字符串:
=
:字符串相等
if [ "$str1" = "$str2" ]; then
echo "字符串相同"
fi
!=
:字符串不相等
if [ "$str1" != "$str2" ]; then
echo "字符串不同"
fi
-z
:字符串长度为0 (Zero)
if [ -z "$str" ]; then
echo "字符串为空"
fi
-n
:字符串长度非0 (Non-zero)
if [ -n "$str" ]; then
echo "字符串不为空"
fi
>
:字符串大于(按字典顺序)
if [[ "$str1" > "$str2" ]]; then
echo "$str1 在字典顺序上大于 $str2"
fi
<
:字符串小于(按字典顺序)
if [[ "$str1" < "$str2" ]]; then
echo "$str1 在字典顺序上小于 $str2"
fi
用于测试文件属性:
-e
:文件存在 (Exist)
if [ -e "/path/to/file" ]; then
echo "文件存在"
fi
-f
:是普通文件 (File)
if [ -f "/path/to/file" ]; then
echo "是普通文件"
fi
-d
:是目录 (Directory)
if [ -d "/path/to/dir" ]; then
echo "是目录"
fi
-r
:文件可读 (Readable)
if [ -r "/path/to/file" ]; then
echo "文件可读"
fi
-w
:文件可写 (Writable)
if [ -w "/path/to/file" ]; then
echo "文件可写"
fi
-x
:文件可执行 (eXecutable)
if [ -x "/path/to/file" ]; then
echo "文件可执行"
fi
-s
:文件大小不为0 (Size)
if [ -s "/path/to/file" ]; then
echo "文件不为空"
fi
用于组合多个条件:
!
:逻辑非
if [ ! -f "/path/to/file" ]; then
echo "不是普通文件"
fi
-a
或 &&
:逻辑与 (AND)
if [ $a -gt 0 -a $a -lt 10 ]; then
echo "$a 在0到10之间"
fi
# 或
if [[ $a -gt 0 && $a -lt 10 ]]; then
echo "$a 在0到10之间"
fi
-o
或 ||
:逻辑或 (OR)
if [ $a -lt 0 -o $a -gt 10 ]; then
echo "$a 小于0或大于10"
fi
# 或
if [[ $a -lt 0 || $a -gt 10 ]]; then
echo "$a 小于0或大于10"
fi
[ ]
测试结构中,运算符和操作数之间需要有空格[[ ]]
是bash的扩展测试命令,支持更多特性(如模式匹配、正则表达式等)(( ))
算术运算中,可以使用传统的数学比较运算符:==
, !=
, >
, <
, >=
, <=
#!/bin/bash
a=10
b=20
# 数值比较
if [ $a -eq $b ]; then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b: a 不等于 b"
fi
# 字符串比较
str1="hello"
str2="world"
if [ "$str1" = "$str2" ]; then
echo "$str1 = $str2 : str1 等于 str2"
else
echo "$str1 = $str2 : str1 不等于 str2"
fi
# 文件测试
if [ -f /etc/passwd ]; then
echo "/etc/passwd 是普通文件"
fi
# 组合条件
if [ $a -lt 100 -a $b -gt 15 ]; then
echo "$a 小于 100 且 $b 大于 15 : 返回 true"
fi
掌握这些关系运算符是编写有效shell脚本的基础,它们使得脚本能够根据不同的条件执行不同的操作。