插件窝 干货文章 linux关系运算符与比较

linux关系运算符与比较

运算符 比较 示例 文件 759    来源:    2025-05-15

Linux Shell 中的关系运算符与比较操作

在 Linux shell 脚本编程中,关系运算符用于比较两个值或变量。这些运算符在条件判断、循环控制等场景中非常重要。以下是主要的比较运算符及其使用方法:

数值比较运算符

这些运算符用于比较整数:

运算符 描述 示例
-eq 等于 [ "$a" -eq "$b" ]
-ne 不等于 [ "$a" -ne "$b" ]
-gt 大于 [ "$a" -gt "$b" ]
-ge 大于或等于 [ "$a" -ge "$b" ]
-lt 小于 [ "$a" -lt "$b" ]
-le 小于或等于 [ "$a" -le "$b" ]

示例

a=10
b=20

if [ "$a" -lt "$b" ]; then
    echo "$a 小于 $b"
fi

字符串比较运算符

这些运算符用于比较字符串:

运算符 描述 示例
= 等于 [ "$a" = "$b" ]
== 等于(同=) [ "$a" == "$b" ]
!= 不等于 [ "$a" != "$b" ]
< 小于(按字典序) [[ "$a" < "$b" ]]
> 大于(按字典序) [[ "$a" > "$b" ]]
-z 字符串为空 [ -z "$a" ]
-n 字符串非空 [ -n "$a" ]

示例

str1="hello"
str2="world"

if [ "$str1" != "$str2" ]; then
    echo "字符串不相等"
fi

文件测试运算符

这些运算符用于测试文件属性:

运算符 描述 示例
-e 文件存在 [ -e "file" ]
-f 是普通文件(非目录/设备) [ -f "file" ]
-d 是目录 [ -d "dir" ]
-s 文件大小不为零 [ -s "file" ]
-r 文件可读 [ -r "file" ]
-w 文件可写 [ -w "file" ]
-x 文件可执行 [ -x "file" ]
-L 是符号链接 [ -L "file" ]

示例

if [ -f "/etc/passwd" ]; then
    echo "/etc/passwd 是一个普通文件"
fi

逻辑运算符

用于组合多个条件:

运算符 描述 示例
! [ ! "$a" -eq "$b" ]
-a [ "$a" -eq "$b" -a "$c" -eq "$d" ]
-o [ "$a" -eq "$b" -o "$c" -eq "$d" ]

[[ ]](( )) 中可以使用更直观的: - && 代替 -a - || 代替 -o

示例

if [ "$a" -gt 10 -a "$a" -lt 20 ]; then
    echo "a 在 10 和 20 之间"
fi

高级比较语法

  1. 双括号 (( )) - 用于算术比较

    if (( a > b )); then
       echo "a 大于 b"
    fi
    
  2. 双中括号 [[ ]] - 增强版的 [ ],支持更多特性

    if [[ "$str" == h* ]]; then
       echo "字符串以 h 开头"
    fi
    

注意事项

  1. [ ] 中,变量引用最好用双引号括起来,防止空值或含空格的值导致语法错误
  2. [[ ]] 中,可以不使用引号,因为它能更好地处理空值和空格
  3. 比较字符串时,===[ ] 中是相同的,但在 [[ ]]== 支持模式匹配
  4. 对于数值比较,建议使用 (( )) 语法,更直观且不需要转义

实际应用示例

#!/bin/bash

# 检查参数数量
if [ "$#" -ne 2 ]; then
    echo "用法: $0 数字1 数字2"
    exit 1
fi

# 比较两个数字
if (( $1 > $2 )); then
    echo "$1 大于 $2"
elif (( $1 == $2 )); then
    echo "$1 等于 $2"
else
    echo "$1 小于 $2"
fi

# 检查文件是否存在并可读
file="/etc/passwd"
if [ -e "$file" -a -r "$file" ]; then
    echo "$file 存在且可读"
else
    echo "$file 不存在或不可读"
fi

掌握这些关系运算符和比较方法是编写有效 shell 脚本的基础。根据不同的比较需求选择合适的运算符和语法结构,可以使脚本更加健壮和可读。