检查条件是否为假

时间:2014-07-11 09:25:24

标签: linux bash shell unix conditional-statements

这似乎是一个简单的问题,我想知道为什么谷歌搜索没有给出任何帮助 - 也不是在StackOverflow中,也不是在教程中。我只需要使用bash检查条件是否为假。

我发现的尝试

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

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

他们都没有打印 Hello

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

4 个答案:

答案 0 :(得分:62)

你的意思是:

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

你在等式运算符周围缺少空间。

这可能是阅读http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html的时间 - 尤其是关于if then else和运算符的部分。我在编写脚本时通常会打开它。

答案 1 :(得分:10)

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

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

Read more here about comparison operators in bash.

And more on double parenthesis

答案 2 :(得分:4)

如果您使用test命令([..]),则可以使用整数的比较选项:-eq,等于和-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,这是一个检查文件类型和比较值的命令; test是一个内部命令:如果你向shell询问type [,它将回答[ is a built in shell command。您可以在/usr/bin/[中找到二进制文件。

大概是test EXPRESSION,您可以从man testinfo coreutils test invocation阅读。

  

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

这是人类的一段摘录,有助于更好地理解

  • (表达式) EXPRESSION为真。因此,很容易将错误考虑为操作0==1。 (操作为空格0 == 10==1为表达式。)

  • <强>! EXPRESSION EXPRESSION是错误的。

  • ...
  • 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.

答案 3 :(得分:3)

除了bash的数学评估,你可以使用布尔表达式代替if

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