2011-07-26 47 views
2

我想了解一個shell/bash腳本,只需要在代碼中使用$?的輸入。 它與函數調用一起使用。

功能例如:

function showerr { err=$1 
    if [ $err -ne 0 ]; then 
     echo `date` : "error!" 
     echo "stat : " $2 
     echo `date` : "stat: " $2 
     # alert email 
     prog=$0 
     uname=`whoami` 
     echo `date` : Sending email to ${ADDR_TO} 
     mailx -s "Error checking status " $ADDR_TO << EOF 
+++++++++++++++++++++ 
stat = $2 
util = $prog 
host = $uname 
+++++++++++++++++++++ 
Check $uname for details. 
. 
EOF 
     echo "Exiting program..." 
     exit 1 
    fi 
} 

這裏有一些聲明,呼籲showerr。我看到一些條件內(使用像1或任何數字的值),有些只是將其稱爲$?

if [[ $Res = *"FileNotFound"* ]]     
then 
    echo `date` : Msg here 
    showerr 1 "Msg details here" 
else 
    echo `date` : File: <filename> found. 
fi 

echo `date` : Msg detail here 
flsz=`echo $size | cut -d'"' -f2` 
showerr $? "error getting size for: (${flsz})" 

回答

6

$?是最後一個命令的退出代碼。有關POSIX shell中這些特殊變量的列表,請參見Shell Command Language: Special Parameters

如果第一個參數不是0showerr函數會記錄一個錯誤。

所以:

./some_super_script_that_might_fail 
showerr $? "SuperScript failed" 

如果./some_super_script_that_might_fail的退出代碼不是0(傳統上意味着失敗),只記錄一些東西。

showerr 1 "message" 

將始終記錄。

showerr 0 "message" 

永遠不會做任何事情。

+0

墊 - 感謝您的輸入和鏈接。 – jdamae