2016-07-04 106 views
0

我運行這個bash命令一行:猛砸如果其他然後用sys.exit的bash的版本()

xe pbd-unplug uuid=$PBDUUID 

如果結果存在 - 也就是說,如果變量PBDUUID不是空的話,我想運行另一個命令:

xe sr-forget uuid=$SRUUID 

然而,如果變量是空白,則我想打印錯誤消息

Error: No PBD.

並且腳本立即退出(類似於Python中的sys.exit())。

有沒有辦法將if else then合併成一行?另外,什麼是sys.exit()的bash相當於?

更多信息/評論:由Dilettant

至於評論,是這一做法(if [ -z ${PBDUUID} ]; then)也將正常工作。我沒有意識到這一點。謝謝你。這似乎很直觀。

+0

道歉,如果這是一個重複的問題。如果是這樣,請讓我知道。 –

+1

'if [-z $ {PBDUUID}];然後printf「foo」; else printf「bar」; fi' - 請修改問題。謝謝。 – Dilettant

+2

「在一行中」?爲什麼?單線通常不太易讀,或者如果使用短路布爾邏輯來構造它們,則會比使用簡潔結構的等效代碼更具錯誤性。 –

回答

2
if xe pbd-unplug uuid="$PBDUUID"; then xe sr-forget "uuid=$SRUUID"; else echo "Error: No PBD."; exit 1; fi 

其可讀性,那就是:

if xe pbd-unplug uuid="$PBDUUID"; then 
    xe sr-forget "uuid=$SRUUID" 
else 
    echo "Error: No PBD." >&2 
    exit 1 
fi 

順便說一句,如果你的目標是要檢查一個變量是否爲空,這看起來更像是以下幾點:

if [ -z "$PDBUUID" ]; then 
    xe pdb-unplug uuid="$PDBUUID" && xe sr-forget "uuid=$SRUUID" 
else 
    echo "Error: No PBD." >&2 
    exit 1 
fi 

如果exit不符合您的要求,那麼此代碼大概是在一個子shell中運行,因此exit正在退出該子外殼,而不是整個腳本。請參見SubShellthe processtree bash-hackers.org page的「創建子殼體的操作」部分。

+0

謝謝。這樣做! –