Что делать, если [[$? -ne 0]]; означает в .ksh

У меня есть следующий фрагмент кода, в котором говорится, что если все выполнено, отправите письмо человеку, если он не отправит письмо человеку с сообщением об ошибке.

if [[ $? -ne 0 ]]; then
  mailx -s" could not PreProcess files" [email protected]
else            
  mailx -s" PreProcessed files" [email protected]
fi
done

Я новичок в Linux-кодировании. Я хочу понять, что означает if [[ $? -ne 0 ]];

Ответ 1

Разбивая это, простые термины:

[[ and ]]

... означает, что проводится проверка на правдивость.

$?

... - переменная, содержащая код завершения последней команды запуска.

-ne 0

... проверяет, что вещь слева ($?) "не равна" нулю. В UNIX команда, которая завершается с нулем, выполнена успешно, тогда как выход с любым другим значением (1, 2, 3... до 255) является ошибкой.

Ответ 2

if [[ $? -ne 0 ]]; 

Проверяет код возврата непосредственно предыдущего условия if.

  • $? означает код возврата
  • $? -ne 0 означает, что предыдущая команда возвратила ошибку, так как 0 считается успешным

Ответ 3

Если предыдущая команда вернула код возврата ошибки.

Ответ 4

Предположительно, фрагмент является частью кода, который выглядит примерно так:

 for var in list of words; do
   cmd $var
   if [[ $? -ne 0 ]]; then
      mailx -s" could not PreProcess files" [email protected]
    else            
      mailx -s" PreProcessed files" [email protected]
   fi
 done

Что можно (и должно) переписать более просто как:

for var in list of words; do
  if ! cmd $var; then
    message="could not PreProcess files"
  else
    message="PreProcessed files
  fi
  mailx -s" $message" [email protected]
done

Предложение [[ $? -ne 0 ]] - это хакерский способ проверить возвращаемое значение cmd, но почти всегда не нужно явно проверять $?. Код почти всегда чист, если вы позволите оболочке выполнить проверку, вызвав команду в предложении if.