2011-07-26 11 views
2

私はシェル/ 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 Command Language: Special Parametersを参照してください。

showerrファンクションは、最初のパラメータが0でない場合にエラーを記録します。

ので:./some_super_script_that_might_failの終了コードが0でない場合

./some_super_script_that_might_fail 
showerr $? "SuperScript failed" 

は(伝統的に、それが失敗したことを意味する)何かをログに記録します。

showerr 1 "message" 

は常にログに記録されます。

showerr 0 "message" 

は決して何もしません。

+0

マット - あなたの入力とリンクに感謝します。 – jdamae

関連する問題