2016-07-05 6 views
0

Kann mir jemand sagen, warum dieses Skript nicht funktioniert? Ich bekommeBash-Skript, Syntax für OR-Anweisung

./FileDirTest.sh: line 10: [: missing `]' 
./FileDirTest.sh: line 10: n: command not found 
./FileDirTest.sh: line 13: [: missing `]' 
./FileDirTest.sh: line 13: n: command not found 

Hier ist mein Skript.

if [ -d "$PASSED1" ] 
then echo "Do you want to execute whole directory?(Y/N)" 
    read answer 
    if [ "$answer" == "y" || "$answer" == "Y" ] ; 
    then echo "Execute" 
    fi 
    if [ "$answer" == "n" || "$answer" == "N" ] ; 
    then echo "No" 
      exit 1 
    fi 
fi 

Ich bin sicher, es ist etwas Einfaches. Ich bin neu bei all dem.

+2

Versuchen [shellcheck] (http://shellcheck.net), es erkennt automatisch gemeinsame Syntax Fragen wie diese –

Antwort

3

|| ist kein gültiger Operator für den Befehl ; Sie können es nur zu verwenden zwei verschiedene [ Befehle verbinden:

if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; 

können Sie verwenden jedoch || innerhalb bash ‚s bedingten Befehl:

if [[ "$answer" = "y" || "$answer" = "Y" ]]; 

Die erste der beiden Fehler tritt auf, weil ||, ein spezieller Shell-Operator, angibt, dass der vorherige Befehl abgeschlossen ist, aber [ erfordert ] be giv en als letztes Argument. Der zweite Fehler tritt auf, weil der Wert $answer, der unmittelbar auf || folgt, als Name des auszuführenden Befehls verwendet wird.

+0

Danke , löste mein Problem. – Racehorse35

1

Neben @ Chepner Antwort, können Sie auch, bash -o Operator,

if [ "$answer" == "y" -o "$answer" == "Y" ]; then 
     echo "Execute" 
else 
     echo "No" 
     exit 1 
fi 
+1

'-o' wird nicht empfohlen; es ist eine Erweiterung des POSIX-Standards, die mögliche Mehrdeutigkeiten im Parser einführt, da '[' mit mehr als 4 Argumenten nicht gut definiert ist. – chepner