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 $a
und $b
von 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 REPLY
Variablen gespeichert.) Und wenn Sie a
etwas 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