关系运算符是Linux shell脚本编程中用于比较数值或字符串的重要工具。它们主要用于条件判断语句(如if、while等)中,评估两个值之间的关系。
这些运算符用于比较整数:
-eq
(equal to) - 等于
if [ $a -eq $b ]; then echo "a等于b"; fi
-ne
(not equal to) - 不等于
if [ $a -ne $b ]; then echo "a不等于b"; fi
-gt
(greater than) - 大于
if [ $a -gt $b ]; then echo "a大于b"; fi
-ge
(greater than or equal to) - 大于等于
if [ $a -ge $b ]; then echo "a大于等于b"; fi
-lt
(less than) - 小于
if [ $a -lt $b ]; then echo "a小于b"; fi
-le
(less than or equal to) - 小于等于
if [ $a -le $b ]; then echo "a小于等于b"; fi
这些运算符用于比较字符串:
=
- 字符串相等
if [ "$str1" = "$str2" ]; then echo "字符串相等"; fi
!=
- 字符串不相等
if [ "$str1" != "$str2" ]; then echo "字符串不相等"; fi
-z
- 字符串长度为零(空字符串)
if [ -z "$str" ]; then echo "字符串为空"; fi
-n
- 字符串长度非零
if [ -n "$str" ]; then echo "字符串不为空"; fi
>
- 字符串大于(按字典顺序)
if [[ "$str1" > "$str2" ]]; then echo "str1大于str2"; fi
<
- 字符串小于(按字典顺序)
if [[ "$str1" < "$str2" ]]; then echo "str1小于str2"; fi
这些运算符用于测试文件属性:
-e
- 文件存在
if [ -e file.txt ]; then echo "文件存在"; fi
-f
- 是普通文件(不是目录或设备文件)
if [ -f file.txt ]; then echo "是普通文件"; fi
-d
- 是目录
if [ -d dir ]; then echo "是目录"; fi
-r
- 文件可读
if [ -r file.txt ]; then echo "文件可读"; fi
-w
- 文件可写
if [ -w file.txt ]; then echo "文件可写"; fi
-x
- 文件可执行
if [ -x script.sh ]; then echo "文件可执行"; fi
-s
- 文件大小不为零
if [ -s file.txt ]; then echo "文件非空"; fi
[ ]
测试结构中,运算符和操作数之间必须有空格[[ ]]
提供了更强大的字符串比较功能,支持模式匹配和正则表达式(( ))
进行算术比较,此时可以使用传统的数学运算符(>, <, ==等)#!/bin/bash
a=10
b=20
# 数值比较
if [ $a -eq $b ]; then
echo "a等于b"
else
echo "a不等于b"
fi
# 字符串比较
str1="hello"
str2="world"
if [ "$str1" = "$str2" ]; then
echo "字符串相同"
else
echo "字符串不同"
fi
# 文件测试
if [ -f /etc/passwd ]; then
echo "/etc/passwd是普通文件"
fi
理解并熟练使用这些关系运算符是编写有效shell脚本的基础。