Bash脚本中的布尔值

分享于 

5分钟阅读

ubuntu

 

问题:

我需要Bash脚本中的布尔值。 例如。

如何使用bash进行该操作?

我发现了类似的东西但我不知道如何正确使用它。


dpkg -l | grep"ansible" | awk '{print $2}'


if [$? -eq 0]; then


 echo OK


else


 echo FAIL


fi



我需要检查,如果命令 dpkg -l | grep"ansible" | awk '{print $2}' 返回给我"Ansible",然后回显,否则回显失败。

我觉得最好是命令


dpkg -l | grep"ansible" | awk '{print $2}'



所以这个命令给了我两个词:


ansible


ansible_lint



我应该如何使用这个bash脚本? 如果我做这样的事情:


ansible = $?


if [$? -eq 0]; then


 echo OK


else


 echo FAIL


fi



那不行,但我确定我做错了。 我如何从dpkg -l |中读取结果grep的 "ansible " | awk '{print $ 2} '命令如果我得到单词"ansible "脚本将打印OK,如果不打印FAIL。


回答 1:

你可以检查这里软件是否以这种方式安装:


if ["$(dpkg -l | awk '/ansible/{print }'|wc -l)" -ge 1 ]; then


 echo OK


else


 echo FAIL


fi



您不能使用退出代码,因为它将来自awk,在这种情况下始终为0


回答 2:

如果你知道确切的软件包名称,你可以询问 dpkg 是否已经安装


dpkg -l packagename



例如:


$ dpkg -l pulsea


dpkg-query: no packages found matching pulsea



如果没有安装包,退出代码也是 1 ( 失败),你可以测试该( 如后所见) 。


$ dpkg -l pulseaudio


Desired=Unknown/Install/Remove/Purge/Hold


| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend


|/Err?=(none)/Reinst-required (Status,Err: uppercase=bad)


||/Name Version Architecture Description


+++-==================-==============-==============-=========================


ii pulseaudio 10.0-1+deb9u1 i386 PulseAudio sound server



这里的退出代码是 0 ( 成功),所以你也可以这样做


$ if dpkg -l pulseaudio; then echo yes;fi


Desired=Unknown/Install/Remove/Purge/Hold


| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend


|/Err?=(none)/Reinst-required (Status,Err: uppercase=bad)


||/Name Version Architecture Description


+++-==================-==============-==============-=========================


ii pulseaudio 10.0-1+deb9u1 i386 PulseAudio sound server


yes



注意上面的"是"。 但是既然你可以使用退出代码,你就不会真正关心dpkg 的输出,所以用if或者


$ if dpkg -l pulseaudio>/dev/null; then echo yes;fi


yes



$ dpkg -l pulseaudio>/dev/null && echo yes


yes



dpkg也可以匹配部分名称,使用星号,就像


$ dpkg -l"*pulse*"



如果你想了解管道中某个命令是否失败,则必须执行类似于检查该命令的操作:


$ false | true


$ echo ${PIPESTATUS[@]} 


1 0



$? 一样,${PIPESTATUS[@]} 随每个命令改变,所以如果你想多次检查它们,你必须先将它们保存到另一个变量。 在你的示例中


ansible = $?


if [$? -eq 0]; then



$?已经通过if测试改变了,因为分配一个几乎总是成功的变量,它可能已经为0了。



BOO  BASH  bash-script  bool  布尔  
相关文章