2012-06-27 50 views
0

我必須做一個條件灰,這取決於兩個命令的結果。問題是其中一個將結果返回給stdout,另一個作爲exitcode。我可以在測試表達式中使用簡單的退出碼嗎?

我必須寫

command2 
RET=$? 
if [ `command1` -eq 1 -a $RET -eq 2 ] ; then ... 

或者是有一些結構,將讓我簡單的邏輯[ ]內訪問command2返回代碼?

if [ `command1` -eq 1 -a ${{{ command2 }}} -eq 2 ] ; then ... 

(與${{{ }}}}是神奇的表現提取的返回碼?)

回答

2

這將是更好地寫:

if [ "`command1`" -eq 1 ] && command2 
then 
    .... 
fi 

或者當你要檢查,如果退出代碼爲2,則:

if [ "`command1`" -eq 1 ] && { command2 ; [ "$?" = 2 ] ; } 
then 
    .... 
fi 

例如:

$ cat 1.sh 
ARG="$1" 

command1() 
{ 
    echo 1 
} 
command2() 
{ 
    return "$ARG" 
} 

if [ "`command1`" -eq 1 ] && { command2 ; [ "$?" = 2 ] ; } 
then 
    echo OK 
else 
    echo FAILED 
fi 

$ sh 1.sh 2 
OK 
$ sh 1.sh 3 
FAILED 
+0

您需要引用如:'[「\'command1 \'」...]'否則一切都會中斷,除非輸出分割爲一個單詞。 –

+0

@JoSo:沒錯!謝謝!! –

0

我猜有沒有辦法避免$?,但我可以使用命令裏面的test語句,在末尾加上;echo $?

if [ `command1` -eq 1 -a `command2 ; echo $?` -eq 2 ] ; then ... 
相關問題