帮酷LOGO
  • 显示原文与译文双语对照的内容


問題:

我需要檢查一個特定的軟體包是否從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,因為分配一個變數幾乎總是成功。





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