Denn es thenist weder ein Befehl noch eine Shell eingebaut, sondern eigentlich ein Teil der ifSyntax. Von man bash:
if list; then list; [ elif list; then list; ] ... [ else list; ] fi
The if list is executed. If its exit status is zero, the then
list is executed. Otherwise, each elif list is executed in
turn, and if its exit status is zero, the corresponding then
list is executed and the command completes. Otherwise, the else
list is executed, if present. The exit status is the exit sta‐
tus of the last command executed, or zero if no condition tested
true.
Also das:
if [ $table = "Session" ]; then continue; fi
funktioniert, weil beide [ $table = "Session" ]und continueBefehle sind, die alleine stehen können; Sie bilden den jeweiligen listTeil des ifBefehls. Fügen Sie diese einfach in eine interaktive Shell ein und Sie werden sehen, dass sie keine Syntaxfehler verursachen:
martin@martin:~$ export table=test
martin@martin:~$ [ $table = "Session" ]
martin@martin:~$ continue
bash: continue: only meaningful in a `for', `while', or `until' loop
Auf der anderen Seite thenist es kein wirklicher Befehl, der für sich allein stehen kann:
martin@martin:~$ then
bash: syntax error near unexpected token `then'
In den ersten beiden Beispielen verwenden Sie also ifgenau so, wie es in der Manpage beschrieben wird:
if list; then list; fi
Wenn Sie jedoch einen ;Rückstand setzen then, bashwird dies als Syntaxfehler angezeigt. Zugegeben, die Shell-Syntax kann manchmal ziemlich verwirrend erscheinen, besonders wenn Sie gerade erst damit anfangen. Ich erinnere mich, dass ich sehr verwirrt darüber war, dass Leerzeichen erforderlich sind, [und ]sobald Sie feststellen, dass [es sich tatsächlich um einen Befehl oder eine eingebaute Shell handelt, ist dies verständlich. :) :)
;durch einnewlineund es funktioniert. Otoh, lass die Zeile mit wegcontinueund du bekommst den Fehler. Lies die Quelle, Ben.