这似乎是一个简单的问题,我想知道为什么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
是一个表达式)。
! 表达式是错误的。
从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