2017-05-25 90 views
1

我有一個if語句在我的bash腳本如下:錯誤在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命令沒有這個串綠,我想執行一些其他的東西。

但是我得到以下錯誤:

條件二進制運算預計近期狀態 腳本返回退出代碼 語法錯誤2

你能告訴我什麼是錯?

回答

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的分組標記。

+1

好像OP想要的是相反的,所以需要一些'!'。 –

+0

我想_反義詞是不明確的,但我認爲它應該是'! cmd1 || ! cmd2'。 –

+0

是的,它是含糊不清的。如果我把問題解釋錯誤,OP可以做出適當的調整。 –