Ваша команда,
check=grep -ci 'text' file.sh
будет интерпретирована оболочкой как «выполнить команду -ci
с аргументами текст
и file.sh
и установите для переменной check
значение grep
в ее среде ».
Оболочка сохраняет значение выхода последней выполненной команды в переменной ?
.Вы можете присвоить его значение одной из ваших собственных переменных следующим образом:
grep -i 'PATTERN' file
check=$?
Если вы хотите воздействовать на это значение, вы можете либо использовать свою переменную check
:
if [ "$check" -eq 0 ]; then
# do things for success
else
# do other things for failure
fi
, либо пропустить, используя отдельную переменная и необходимость проверять все вместе $?
:
if grep -q -i 'pattern' file; then
# do things (pattern was found)
else
# do other things (pattern was not found)
fi
(обратите внимание на -q
, он инструктирует grep
ничего не выводить и выйти, как только что-то совпадает; нас действительно не интересует, что здесь совпадает)
Или, если вы просто хотите "что-то делать", когда шаблон не найден:
if ! grep -q -i 'pattern' file; then
# do things (pattern was not found)
fi
Сохранение $?
в другую переменную требуется только в том случае, если вам понадобится использовать его позже, когда значение в $?
было перезаписано, как в
mkdir "$dir"
err=$?
if [ "$err" -ne 0 ] && [ ! -d "$dir" ]; then
printf 'Error creating %s (error code %d)\n' "$dir" "$err" >&2
exit "$err"
fi
В приведенном выше фрагменте кода, $?
будет перезаписан результатом ["$ err" -ne 0] && [! -d "$ dir"]
тест. Сохранять его здесь действительно необходимо только в том случае, если нам нужно отобразить его и использовать с exit
.