iptables: Нет цепочки/цели/соответствия ULOG

Ваша команда,

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 .

3
12.11.2017, 18:59
0 ответов

Теги

Похожие вопросы