我的bash脚本中有一个if语句,如下所示:
if [[ eb status my-env-staging-worker | grep 'Green' -ne 0 ] || [ eb status my-env-staging-web | grep 'Green' -ne 0 ]]
基本上如果第一个或第二个eb status命令没有字符串Green我想执行其他一些东西。
但是我收到以下错误:
预期的条件二元运算符 语法错误接近状态 脚本返回退出代码2
你能告诉我什么不对吗?
答案 0 :(得分:5)
[[
和[
不适用于分组。他们是独立的命令。不要使用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'
或
if ! { eb status my-env-staging-worker | grep -q 'Green' || eb status my-env-staging-web | grep -q 'Green'; }
您可以在此处看到用于分组的{
和}
。大括号和圆括号是bash的分组标记。