Ошибка в инструкции bash if: ожидается условный бинарный оператор

У меня есть оператор if в моем сценарии bash следующим образом:

if [[ eb status my-env-staging-worker | grep 'Green' -ne 0 ] || [ eb status my-env-staging-web | grep 'Green' -ne 0 ]]

По сути, если первая или вторая команда состояния eb не имеет строки Green, я бы хотел выполнить что-то еще.

Однако я получаю следующую ошибку:

Ожидаемая синтаксическая ошибка условного бинарного оператора рядом со сценарием состояния вернула код выхода 2

Не могли бы вы сказать мне, что не так?


person HosseinK    schedule 25.05.2017    source источник


Ответы (1)


[[ и [ не для группировки. Это независимые команды. Вместо if [[ cmd1 -ne 0 ] || [ cmd2 -ne 0 ]] опустите скобки и тесты и напишите просто if cmd1 || cmd2.

if eb status my-env-staging-worker | grep -q 'Green' || eb status my-env-staging-web | grep -q 'Green'

Я добавил -q, чтобы подавить вывод grep, поскольку вас интересует только код возврата.

Если вы хотите инвертировать условие, напишите:

if ! eb status my-env-staging-worker | grep -q 'Green' && ! eb status my-env-staging-web | grep -q 'Green'

or

if ! { eb status my-env-staging-worker | grep -q 'Green' || eb status my-env-staging-web | grep -q 'Green'; }

Здесь вы можете увидеть { и }, используемые для группировки. Фигурные скобки и круглые скобки являются токенами группировки bash.

person John Kugelman    schedule 25.05.2017
comment
Похоже, ОП хочет обратного, поэтому нужны некоторые !. - person Tom Fenech; 25.05.2017
comment
Я предполагаю, что противоположное было двусмысленным, но я думаю, что это должно быть ! cmd1 || ! cmd2. - person Tom Fenech; 25.05.2017
comment
Да, неоднозначно. ОП может внести коррективы, если я неправильно истолковал вопрос. - person John Kugelman; 25.05.2017