我正在尝试理解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})"
答案 0 :(得分:6)
$?
是最后一个命令的退出代码。有关POSIX shell中此类特殊变量的列表,请参阅Shell Command Language: Special Parameters。
showerr
函数如果第一个参数不是0
,则会记录错误。
所以:
./some_super_script_that_might_fail
showerr $? "SuperScript failed"
如果./some_super_script_that_might_fail
的退出代码不为0(传统上意味着它失败了),只会记录一些内容。
showerr 1 "message"
将始终记录。
showerr 0 "message"
永远不会做任何事情。