Denn es then
ist weder ein Befehl noch eine Shell eingebaut, sondern eigentlich ein Teil der if
Syntax. 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 continue
Befehle sind, die alleine stehen können; Sie bilden den jeweiligen list
Teil des if
Befehls. 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 then
ist 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 if
genau so, wie es in der Manpage beschrieben wird:
if list; then list; fi
Wenn Sie jedoch einen ;
Rückstand setzen then
, bash
wird 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 einnewline
und es funktioniert. Otoh, lass die Zeile mit wegcontinue
und du bekommst den Fehler. Lies die Quelle, Ben.