Что делать, если [$? -eq 0] для сценариев оболочки?
Эта строка в оболочке script я видел:
grep -e ERROR ${LOG_DIR_PATH}/${LOG_NAME} > /dev/null
if [ $? -eq 0 ]
Ответы
Ответ 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 не работает если вы его используете.)