Поскольку вы хотите проверить состояние выхода grep
и хотите увидеть строку, если она не содержит xxxx
, вы можете адаптировать следующий код в соответствии с нашими требованиями (где я использую echo "$line"
как суррогат для вашего command1
, и я повторяю exit 1
вместо того, чтобы фактически выходить, когда ваш код будет выполняться exit 1
):
for line in 'hello xxxx here' 'hello yyyy here'
do
if ! echo "$line" | grep -v 'xxxx'
then echo "exit 1"
fi
done
Вывод:
exit 1
hello yyyy here
См. Как отменить возвращаемое значение процесса? для обсуждения оператора !
в оболочках POSIX (например, Bash).
Поскольку вы не 'Если вы хотите увидеть результат, если он содержит xxxx
, но в противном случае опция -v
для grep
инвертирует логику, выводя только строки, которые не соответствуют xxxx
.Статус grep -v 'xxxx'
равен 0, когда он находит только строки, которые не соответствуют xxxx
, и 1
, если он находит строку, которая соответствует.Оператор !
инвертирует это состояние, а if
проверяет, является ли инвертированный статус 0, выполняя код then
, если инвертированный статус равен 0.
Обратите внимание, что [
это просто командавозвращает подходящее состояние выхода, которое тестирует if
.Во многих системах вы можете найти /bin/[
как исполняемый файл, возможно, как (символическую?) Ссылку на /bin/test
, но современные оболочки неизменно воспринимают [
и test
как встроенные команды.Обратите внимание, что [
проверяет, что его последний аргумент равен ]
и возражает, если это не так;test
нет.