2011-07-26 4 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을 참조하십시오.

첫 번째 매개 변수가 0이 아닌 경우 showerr 함수는 오류를 기록합니다. 그래서

: ./some_super_script_that_might_fail의 종료 코드는 (전통적으로 실패했음을 의미) 0이 아닌 경우

./some_super_script_that_might_fail 
showerr $? "SuperScript failed" 

은 뭔가를 기록합니다.

showerr 1 "message" 

은 항상 기록됩니다.

showerr 0 "message" 

은 절대로 아무 것도하지 않습니다.

+0

매트 - 입력 해 주셔서 감사합니다. – jdamae