【问题标题】:How to compare in shell script?如何在 shell 脚本中进行比较?
【发布时间】:2011-03-17 18:19:27
【问题描述】:

如何在 shell 脚本中进行比较?

或者,为什么下面的脚本什么也不打印?

x=1
if[ $x = 1 ] then echo "ok" else echo "no" fi

【问题讨论】:

  • 你需要一个 ;在 ] 之后和 if 之后的一个空格:if [ $x = 1 ]; then echo "ok" ; else echo "no" ; fi
  • @Sergio 它给了bash: syntax error near unexpected token `then'
  • @Hossein 它给了1=1: command not found
  • 也许我的 bash 文件(在系统上)有问题?

标签: linux bash shell command-line


【解决方案1】:

对于数字,使用-eq-ne、...表示等于、不等于、...

x=1
if [ $x -eq 1 ]
then 
  echo "ok" 
else 
  echo "no" 
fi

对于其他人,请使用 == 而不是 =

【讨论】:

  • 通过使用 -eq 和 ;在 ] 之后它给出了bash: syntax error near unexpected token `then'
  • 是的,实际上你必须在每个“[”之前和之后留一个“空格”......我只是编辑了一个有效的代码。
  • @Tom 不要使用 '==' 而不是 '='。 'test' 命令(又名'['),无论是内置的还是外部的,通常都接受'==',但'=' 更通用。使用 '==' 会不必要地限制脚本的可移植性。
【解决方案2】:

使用快捷方式 AND 和 OR 的简短解决方案:

x=1
(( $x == 1 )) && echo "ok" || echo "no"

【讨论】:

    【解决方案3】:

    您可以在 shell 中通过两种方法进行比较

    1. 单括号语法 (if [ ])
    2. 双括号语法 (if (( )))

    使用单括号语法

    运营商:-

    -eq 等于

    -ne 不等于

    -gt 大于

    -ge 大于等于

    -lt 小于

    -le 小于或等于

    在你的情况下:-

    x=1
    if [ $x -eq 1 ]
    then 
      echo "ok" 
    else 
      echo "no" 
    fi
    

    双括号语法

    双括号结构也是一种允许在 Bash 中以C 风格操作变量的机制,例如,(( var++ )).

    在你的情况下:-

    x=1
    if (( $x == 1 )) # C like statements 
    then
        echo "ok"
    else
        echo "no"
    fi
    

    【讨论】:

      【解决方案4】:

      这取决于语言。使用 bash,您可以使用 == 运算符。否则,您可以使用 -eq -lt -gt 来表示等于、小于、大于。

      $ x=1
      $ if [ "$x" == "2" ]; then echo "yes"; else echo "no"; fi
      no
      

      编辑:在== 周围添加空格并使用 2 进行测试。

      【讨论】:

      • 您需要在“==”周围有空格——尝试使用[ "$x"=="2" ] 命令,您会发现这也是正确的。您需要[ "$x" = "1" ][ $x -eq 1 ],或使用bash [[ $x == 1 ]](( x == 1 ))
      • 感谢您的更正,手动缩进问题。但是 [ ] 也可以。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 2021-03-28
      • 2021-10-12
      • 1970-01-01
      • 2011-02-15
      相关资源
      最近更新 更多