2017-05-25 3 views
1

ich in meinem Bash-Skript eine if-Anweisung haben, wie folgt:Fehler in bash if-Anweisung: Bedingte Binäroperators erwartet

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

Grundsätzlich, wenn die erste oder zweite eb Statusbefehl haben nicht die Zeichenfolge Grün Ich möchte etwas anderes ausführen.

Allerdings bekomme ich folgende Fehler:

Conditional Binäroperators erwartet Syntaxfehler in der Nähe von Status Skript zurückgegeben Exit-Code 2

Können Sie mir sagen, was ist falsch?

Antwort

5

[[ und [ sind nicht zum Gruppieren. Sie sind unabhängige Befehle. Geben Sie anstelle von if [[ cmd1 -ne 0 ] || [ cmd2 -ne 0 ]] die Klammern und die Tests aus und schreiben Sie einfach if cmd1 || cmd2.

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

Ich habe -q hinzugefügt grep die Ausgabe zu unterdrücken, da Sie nur über den Return-Code kümmern.

Wenn Sie die Bedingung invertieren möchten, schreiben Sie:

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

oder

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

Hier können Sie sehen { und } zur Gruppierung verwendet. Curly Klammern und Klammern sind bash Gruppierung Token.

+1

Scheint wie das OP das Gegenteil will, so dass einige '!' Benötigt werden. –

+0

Ich denke, das Gegenteil war zweideutig, aber ich denke, es sollte sein! cmd1 || ! cmd2'. –

+0

Ja, es ist mehrdeutig. OP kann die richtige Einstellung vornehmen, wenn ich die Frage falsch interpretiere. –

Verwandte Themen