帮酷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  |  如果智培  |  酷兔英语