帮酷LOGO
0 0 评论
文章标签:AWK  PAC  BASH  PACK  


问题:

我需要检查一个特定的软件包是否从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}' 返回 me"ansible",然后回显,否则回显失败。

@EDIT

我觉得最好是命令


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



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


ansible


ansible_lint



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


ansible = $?


if [$? -eq 0]; then


 echo OK


else


 echo FAIL


fi



我觉得这不正常但我肯定是错误的。 如果 get"ansible"grep grep命令,那么如果没有打印失败,那么 dpkg -l"ansible"| awk命令 and 。


回答 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



注意上面的"是"。 但现在,既然你可以使用出口代码,那么你不会真正关心它的输出,因这里忽略 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



$? 已经被that测试所改变,可以能是 0,因为分配一个变量几乎总是成功。




文章标签:PAC  PACK  BASH  AWK  

Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语