it-swarm.com.ru

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

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

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 ]]; 

10
Rahul sawant

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

[[ and ]]

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

$?

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

-ne 0

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

13
bishop
if [[ $? -ne 0 ]]; 

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

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

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

0
Claudio

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

 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, но почти всегда нет необходимости явно проверять $?. Код почти всегда чище, если вы позволите Shell выполнить проверку, вызвав команду в предложении if. 

0
William Pursell