Что делать, если [[$? -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.