shell编程 - 解释$的使用?用函数调用

时间:2011-07-26 17:54:50

标签: unix shell

我正在尝试理解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})"

1 个答案:

答案 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"

永远不会做任何事情。