2013-03-25 49 views
0

我有一個總是執行的if語句,我不知道爲什麼。Shell腳本如果語句子句總是執行

下面的代碼:

var=dom1 
if(var=$(ssh [email protected] /usr/sbin/xm li | grep dom1 | awk '{print $1}')); then 

那麼代碼,如果真要執行。

問題是,if語句後的東西總是執行,不管它是否真實。

if語句中的命令因爲我手動嘗試過而起作用。

xm li只給出所有正在運行的虛擬機,其餘部分確保唯一返回的是虛擬機的名稱。當dom1在另一臺機器上運行時,它將返回dom1。當dom1不在另一臺機器上運行時,它不會返回任何東西。

我不確定最新情況,任何幫助將不勝感激。謝謝。

回答

3

使用awk命令完成將失敗,因爲您不能依賴退出狀態awk(在shell中不具有布爾值)。相反,只需使用grep本身來匹配布爾邏輯。通過在原始POST中提供一些示例輸入&匹配規則,我將幫助您做到這一點。


如果你真的想在你的崗位上使用awk像一個解決辦法:

更多了,

var=$(ssh [email protected] /usr/sbin/xm li | awk '/dom1/{print $1}') 
if [[ $var ]]; then 
    # ... 
fi 

如果有子命令的輸出,將工作。你可以在之前測試它。

+0

注意:不需要'grep ... | awk',看我的編輯。 – 2013-03-26 00:06:35

+0

太棒了,感謝您的幫助。將命令切換到變量聲明,然後測試變量的工作。 – user939287 2013-03-27 16:32:23