программирование оболочки - интерпретация использования $? с вызовом функции - PullRequest
2 голосов
/ 26 июля 2011

Я пытаюсь понять скрипт 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 Ответ

6 голосов
/ 26 июля 2011

$? - код выхода из последней команды.См. Язык команд оболочки: Специальные параметры для получения списка таких специальных переменных в оболочках POSIX.

Функция showerr регистрирует ошибку, если ее первый параметр не 0.

Итак:

./some_super_script_that_might_fail
showerr $? "SuperScript failed"

будет что-то регистрировать только в том случае, если код выхода ./some_super_script_that_might_fail не равен 0 (что традиционно означает, что это не удалось).

showerr 1 "message"

всегда будетlog.

showerr 0 "message"

никогда ничего не сделает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...