Подтвердить что ты не робот

Что делать, если [$? -eq 0] для сценариев оболочки?

Эта строка в оболочке script я видел:

grep -e ERROR ${LOG_DIR_PATH}/${LOG_NAME}  > /dev/null
if [ $? -eq 0 ] 
4b9b3361

Ответ 1

Он проверяет возвращаемое значение ($?) grep. В этом случае он сравнивает его с 0 (успех).

Обычно, когда вы видите что-то вроде этого (проверяя возвращаемое значение grep), он проверяет, была ли обнаружена конкретная строка. Хотя перенаправление на /dev/null не требуется, то же самое можно сделать с помощью -q.

Ответ 2

$? - это статус выхода последней выполненной команды; по соглашению, 0 означает успех, а что-либо еще указывает на сбой. Эта строка проверяет, выполнена ли команда grep.

В управляющей странице grep указано:

Статус выхода равен 0, если выбранные строки найдены, и 1, если не найден. Если произошла ошибка, статус выхода равен 2. (Примечание: код обработки ошибок POSIX должен проверять значение "2" или больше.)

Итак, в этом случае он проверяет, были ли найдены строки ERROR.

Ответ 3

Это чрезвычайно сложный способ проверить успех/сбой команды. Как правило, фрагмент кода, который вы даете, будет реорганизован как:

if grep -e ERROR ${LOG_DIR_PATH}/${LOG_NAME} > /dev/null; then
   ...
fi

(Хотя вы можете использовать "grep -q" в некоторых случаях вместо перенаправления на /dev/null, сделать это не переносимо. Многие реализации grep не поддерживают параметр -q, поэтому ваш script не работает если вы его используете.)