2013-05-05 50 views
0

下面是我的Ubuntu的機器上執行一段shell腳本代碼意想不到的結果:測試過程的返回狀態返回ubuntu上

myProcess 
ret="$?" 
if [ "${ret}" == "0" ] 
then 
    echo good 
else 
    echo bad "${ret}" 
fi 

因此,邏輯很簡單:如果myProcess返回非零退出狀態,這是不好的,否則很好。我通過將它分離成單獨的腳本並從命令行運行它來測試了這段代碼。當myProcess返回0時,我得到了預期的good

但是,當我在生產中運行它時,我得到了bad 0。所以即使返回代碼似乎爲0,if測試似乎會返回false。這裏發生了什麼?

+0

什麼是您的「shebang」行? '#!/ bin/bash'或#!/ bin/sh'? (現在看不出來,爲什麼這很重要,但是因爲你沒有顯示整個腳本,所以在用bash與原始Bourne Shell執行時可能會有不兼容)。祝你好運。 – shellter 2013-05-06 01:29:09

+0

@shellter:它是'#!/ bin/sh'。另外,萬一它很重要,在生產中這個腳本會被作爲一個cron工作來執行。 – 2013-05-06 01:44:06

+0

我不認爲bourne shell支持'=='..根據你的操作系統,你的'#!/ bin/sh'真的是Bash或者Bourne。首先嚐試'=',如果這不能解決問題,那麼用''X $ {ret} X「= X0X」','echo bad X $ {ret} X調試'ret'的實際值'。祝你好運 – shellter 2013-05-06 02:38:57

回答

0

看來,這個問題是可能與==結合使用太多的引號。以下修改代碼似乎工作正常:

myProcess 
ret=$? 
if [ ${ret} -eq 0 ] 
then 
    echo good 
else 
    echo bad "${ret}" 
fi 
0

有一個簡單的方法來做到這一點(無需治療$?和創建變量的副本):

if myProcess; then 
    echo "good" 
else 
    echo "bad" >&2 
fi 

如果myProcess正確編碼,這應該工作。如果沒有,請在原始帖子中粘貼確切的輸出/錯誤。

這簡短的方式被命名爲布爾邏輯

+0

但是我的代碼出了什麼問題?我需要捕獲返回代碼,因爲在「壞」情況下,我需要將它作爲參數之一傳遞給爲此案例生成特殊警報的進程。 – 2013-05-05 22:05:08