2014-01-29 37 views
1
if [ $? -ne 0 ]; then echo "error"; else echo "success"; fi 

條件成功,簡單Shell如果不工作

if [ ! -f index.html ]; then echo "error"; else echo "success"; fi 

成功,但由於某種原因

if [ ! -f index.html ] || [ $? -ne 0 ]; then echo "error"; else echo "success"; fi 

失敗。

在我的情況「index.html」存在和$? = 0

回答

3
if [ ! -f index.html ] || [ $? -ne 0 ] 

那裏的$?的值反映了[ ! -f index.html ]的退出代碼。由於index.html存在,該語句會導致非零的退出代碼。

嘗試代替:

if [ $? -ne 0 ] || [ ! -f index.html ] ; then echo "error"; else echo "success"; fi 

因爲[ $? -ne 0 ]首先執行,的$?值將反映出退出代碼任何的現有命令是和的[ ! -f index.html ]沒有結果。

另一種可能性是將兩個測試成一個單一的條件表達式:

if [ ! -f index.html -o $? -ne 0 ]; then echo "error"; else echo "success"; fi 

因爲有一個現在的單個測試表達式,在運行! -f index.html試驗前的bash評估$?。因此,$?將成爲任何先前命令的退出代碼。

0

試試這個:

if [[ ! -f index.html || $? -ne 0 ]]; then echo "error"; else echo "success"; fi 
0

每個命令你執行的變化$?。最好立即將其存儲在一個新變量中,然後在閒暇時檢查它。