检查一个条件是否为假

这似乎是一个简单的问题,我想知道为什么Google没有给任何有用的东西 – 也没有在StackOverflow中,也没有在教程中。 我只需要检查使用bash,一个条件是错误的。

我发现我尝试了

if ! [ 0==2 ]; then echo Hello; fi 

 if [ ! 0==2 ]; then echo Hello; fi 

他们都不打印你好

我发现只有两个类似的问题,但在这两种情况下的最终答案是重组代码不使用“假”条件。

你的意思是:

 if ! [ 0 == 2 ]; then echo Hello; fi 

您在平等运营商周围缺乏空间。

这可能是阅读http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html的时候 – 尤其是关于if和else的章节。 我在编写脚本时通常会打开

对于数学评估使用(( ))在bash中。 对于文本使用[[ ]]

 if (( $i == 0 )); then echo "i is 0" else echo "i is unequal 0" 

在这里阅读更多关于比较运算符在bash中。

而更多的是双括号

如果使用test命令( [..] ),则可以使用比较选项来计算整数: -eq ,equal和-ne ,不等于。

 if [ 0 -eq 2 ]; then echo true ; else echo false ; fi # false if [ 0 -eq 0 ]; then echo true ; else echo false ; fi # true if [ 0 -ne 2 ]; then echo true ; else echo false ; fi # true if [ 0 -ne 0 ]; then echo true ; else echo false ; fi # false 

在bash中,运算符相当于test ,一个检查文件类型和比较值的命令; 测试是一个内部命令:如果你问到你的shell type [它会回答[ is a built in shell command 。 您通常可以在/usr/bin/[找到二进制文件。

概要是test EXPRESSION ,你可以从man test或者从info coreutils test invocation读取。

省略的EXPRESSION默认为false。 否则,EXPRESSION是真或假,并设置退出状态。

这是凸轮帮助理解更好一点的人的摘录

  • (EXPRESSION) EXPRESSION是真的。 所以很容易在错误中考虑作为一个操作0==1 。 (使用空格的操作是0 == 1 0==1是一个表达式)。

  • 表达式是错误的。

  • INTEGER1 -eq INTEGER2 INTEGER1等于INTEGER2
  • INTEGER1 -ne INTEGER2 INTEGER1不等于INTEGER2

info coreutils test invocation你可以阅读关于测试的退出状态。

退出状态:

  0 if the expression is true, 1 if the expression is false, 2 if an error occurred. 

除了bash的数学评估之外,还可以使用布尔表达式而不是if

 [max@localhost:~] $ (( 0 == 0 )) && echo True || echo False True [max@localhost:~] $ (( 0 != 0 )) && echo True || echo False False