Unix / Linux - Shell 关系运算符

  • 简述

    shell 支持以下特定于数值的关系运算符。这些运算符不适用于字符串值,除非它们的值是数字。
    假设变量 a 持有 10 和变量 b 持有 20 然后 -
    操作符 描述 例子
    -eq 检查两个操作数的值是否相等;如果是,则条件变为真。 [ $a -eq $b ] 不正确。
    -ne 检查两个操作数的值是否相等;如果值不相等,则条件为真。 [ $a -ne $b ] 是真的。
    -gt 检查左操作数的值是否大于右操作数的值;如果是,则条件变为真。 [ $a -gt $b ] 不正确。
    -lt 检查左操作数的值是否小于右操作数的值;如果是,则条件变为真。 [ $a -lt $b ] 是真的。
    -ge 检查左操作数的值是否大于或等于右操作数的值;如果是,则条件变为真。 [ $a -ge $b ] 不正确。
    -le 检查左操作数的值是否小于或等于右操作数的值;如果是,则条件变为真。 [ $a -le $b ] 是真的。
    理解所有条件表达式都应该放在方括号内并在它们周围有空格是非常重要的。例如,[ $a <= $b ] 是正确的,而 [$a <= $b] 是不正确的。
  • 例子

    这是一个使用所有关系运算符的示例 -
    
    #!/bin/sh
    a=10
    b=20
    if [ $a -eq $b ]
    then
       echo "$a -eq $b : a is equal to b"
    else
       echo "$a -eq $b: a is not equal to b"
    fi
    if [ $a -ne $b ]
    then
       echo "$a -ne $b: a is not equal to b"
    else
       echo "$a -ne $b : a is equal to b"
    fi
    if [ $a -gt $b ]
    then
       echo "$a -gt $b: a is greater than b"
    else
       echo "$a -gt $b: a is not greater than b"
    fi
    if [ $a -lt $b ]
    then
       echo "$a -lt $b: a is less than b"
    else
       echo "$a -lt $b: a is not less than b"
    fi
    if [ $a -ge $b ]
    then
       echo "$a -ge $b: a is greater or  equal to b"
    else
       echo "$a -ge $b: a is not greater or equal to b"
    fi
    if [ $a -le $b ]
    then
       echo "$a -le $b: a is less or  equal to b"
    else
       echo "$a -le $b: a is not less or equal to b"
    fi
    
    上面的脚本将生成以下结果 -
    
    10 -eq 20: a is not equal to b
    10 -ne 20: a is not equal to b
    10 -gt 20: a is not greater than b
    10 -lt 20: a is less than b
    10 -ge 20: a is not greater or equal to b
    10 -le 20: a is less or  equal to b
    
    使用关系运算符时需要考虑以下几点 -
    • 运算符和表达式之间必须有空格。例如,2+2 不正确;它应该写为 2 + 2。
    • if...then...else...fi 声明是一个决策声明,在下一章中已经解释过。