Syntaxfehler im bedingten Ausdruck

Syntaxfehler im bedingten Ausdruck

Ich schreibe ein Skript, in dem ich die Kombination aus logischem „ODER“ und logischen „UND“-Anweisungen verwende. Dies ist das Skript:

#!/bin/bash

echo "Enter the value of a"
read $a
echo "Enter the value of b"
read $b
if

[[ $a != STARTED && $b == STARTED ] || [ $b != STARTED && $a == STARTED ]]; then

echo "Either of the JVMs is not yet up, so lets wait for some more time"

i=$(($i+1))
sleep 1s

fi

und beim Ausführen wird der folgende Fehler angezeigt:

line 13: syntax error in conditional expression
line 13: syntax error near `]'
line 13: `[[ $a != STARTED && $b == STARTED ] || [ $b != STARTED && $a == STARTED ]]; then'

Ich verwende die Bash-Shell. Ich bin für jede Hilfe dankbar.

Antwort1

Sie haben [[mit nicht übereinstimmend ]. sollte immer mit und mit [[geschlossen werden . Verwenden Sie:]][]

if [[ $a != STARTED && $b == STARTED ]] || [[ $b != STARTED && $a == STARTED ]]; then

Besser noch, da Sie sowieso verwenden [[:

if [[ ($a != STARTED && $b == STARTED) || ($b != STARTED && $a == STARTED) ]]; then

Der andere Fehler, den ich erst beim Formatieren bemerkt habe, besteht darin, dass Sie Folgendes tun:

read $a
read $b

Sie sollten Folgendes tun:

read a
read b

Bei der ersten Form werden $aund $bvon der Shell durch ihren Inhalt ersetzt. Wenn Sie sie also nicht vor dieser Zeile festgelegt hätten, wäre der endgültige Befehl:

read

(in diesem Fall würde der gelesene Wert in der REPLYVariablen gespeichert.) Und wenn Sie aetwas eingestellt hätten (wie a="blah blah"), würde es etwa so aussehen:

read blah blah

Antwort2

Anstatt:

[[ $a != STARTED && $b == STARTED ] || [ $b != STARTED && $a == STARTED ]]; then

Ich würde ... benutzen:

if [ $a != STARTED && $b == STARTED ] || [ $b != STARTED && $a == STARTED ]; then

verwandte Informationen