插件窝 干货文章 如何理解linux关系运算符

如何理解linux关系运算符

字符串 运算符 echo 文件 730    来源:    2025-05-13

Linux 关系运算符详解

关系运算符是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
    

注意事项

  1. [ ]测试结构中,运算符和操作数之间必须有空格
  2. 对于字符串比较,最好将变量用双引号括起来,防止变量为空时出现语法错误
  3. 双括号[[ ]]提供了更强大的字符串比较功能,支持模式匹配和正则表达式
  4. 在bash中,可以使用(( ))进行算术比较,此时可以使用传统的数学运算符(>, <, ==等)

示例

#!/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脚本的基础。