插件窝 干货文章 在linux脚本中关系运算符

在linux脚本中关系运算符

echo 字符串 then bash 994    来源:    2025-05-15

Linux Shell脚本中的关系运算符

在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
    

注意事项

  1. [ ]测试结构中,运算符和操作数之间需要有空格
  2. 对于字符串比较,最好将变量用双引号括起来,防止空变量或包含空格的情况
  3. [[ ]]是bash的扩展测试命令,支持更多特性(如模式匹配、正则表达式等)
  4. 数值比较不能用于字符串,反之亦然
  5. (( ))算术运算中,可以使用传统的数学比较运算符:==, !=, >, <, >=, <=

示例

#!/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脚本的基础,它们使得脚本能够根据不同的条件执行不同的操作。