这似乎是一个简单的问题,我想知道为什么谷歌搜索没有给出任何帮助 - 也不是在StackOverflow中,也不是在教程中。我只需要使用bash检查条件是否为假。
我发现的尝试
if ! [ 0==2 ]; then echo Hello; fi
和
if [ ! 0==2 ]; then echo Hello; fi
他们都没有打印 Hello 。
我发现只有两个类似的问题,但两种情况下的最终答案都是重组代码,不使用“假”条件。
答案 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"
答案 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 test
或info coreutils test invocation
阅读。
省略的EXPRESSION默认为false。否则,EXPRESSION为true或false并设置退出状态。
这是人类的一段摘录,有助于更好地理解
(表达式) EXPRESSION为真。因此,很容易将错误考虑为操作0==1
。 (操作为空格0 == 1
,0==1
为表达式。)
<强>! EXPRESSION EXPRESSION是错误的。
从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