这似乎是一个简单的问题,我想知道为什么googling没有给出有用的结果——无论是在StackOverflow上还是在教程中。我只需要使用bash检查条件是否为false。
根据我发现的内容,我尝试了
if ! [ 0==2 ]; then echo Hello; fi
if [ ! 0==2 ]; then echo Hello; fi
他们都没有打印出Hello。
我只找到两个类似的问题,但在这两种情况下,最终的答案都是重新构造代码以不使用“false”条件。
这似乎是一个简单的问题,我想知道为什么googling没有给出有用的结果——无论是在StackOverflow上还是在教程中。我只需要使用bash检查条件是否为false。
根据我发现的内容,我尝试了
if ! [ 0==2 ]; then echo Hello; fi
if [ ! 0==2 ]; then echo Hello; fi
他们都没有打印出Hello。
我只找到两个类似的问题,但在这两种情况下,最终的答案都是重新构造代码以不使用“false”条件。
你的意思是:
if ! [ 0 == 2 ]; then
echo Hello;
fi
您在等号运算符周围缺少空格。
现在可能是阅读http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html的时候了 - 特别是有关if then else和运算符的部分。当我编写脚本时,通常会将其打开。
test
运算符 [ ... ]
检查表达式。0==0
不是操作而是表达式。尝试执行 [ gfhjg ]; echo $?
,它将回答 0(-> 真),就像你写 [ 1 == 1 ]; echo $?
一样,而如果你写 [ 1 == 2 ]; echo $?
它将回答 1(-> 假)。 - Hastur[
和test
的好理由,主要是因为它们是标准的。根据Shell标准,使用[[
会产生未指定的结果。如果你希望用户能够灵活地使用更好、更小、更快的Shell(例如,能够根据他们正在使用的应用程序选择合适的工具),Shell脚本就不能使用[[
。 - William Pursell#!/bin/bash
she-bang,因为我不会用其他shell测试我的脚本。当然,在autoconf
世界中,你的评论是有意义的。 - Maxim Egorushkin在bash中进行数学计算时,请使用(( ))
。对于文本,请使用[[ ]]
。
if (( $i == 0 )); then
echo "i is 0"
else
echo "i is unequal 0"
如果你正在使用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 [
命令,它将回答[ 是一个内置的shell命令
。通常也可以在/usr/bin/ [
找到二进制文件。
SYNOPSIS是test EXPRESSION
,你可以从man test
或者info coreutils test invocation
中了解到。
省略的表达式默认为false。否则,表达式为true或false并设置退出状态。
这是来自man的节选,可以帮助更好地理解:
( 表达式 ) 表达式为真。因此很容易犯错误认为0==1
是操作(该操作是带有空格的0 == 1
,0==1
是一种表达式)。
! 表达式 表达式为假。
从info coreutils test invocation
可以了解到关于test命令退出状态的更多信息。
退出状态:
0 if the expression is true,
1 if the expression is false,
2 if an error occurred.
if
:[max@localhost:~] $ (( 0 == 0 )) && echo True || echo False
True
[max@localhost:~] $ (( 0 != 0 )) && echo True || echo False
False
[ 0 != 2 ] && echo "hello"
这样就实现了。 - fedorqui[
是test
命令的别名。实际上,if
命令只是检查另一个命令的结果,即test
命令的结果。这些天可能都由 shell 内部处理,但您应该将if
视为普通命令,它反过来调用另一个命令。 - Some programmer dude==
不等于=
。 - Some programmer dudeif
视为一个命令的建议。if
是shell语法中引入条件子句的关键字。它绝对不是命令。在某个时候,有人认为引入命令[
是个好主意,这样if [...]
将出现在shell中的两个语法符号中,但[
并不是shell语法的一部分。 - William Pursell