Ich bin neu in der Shell-Programmierung und habe festgestellt, dass Folgendes akzeptiert wird:
if [ $table = "Session" ]; then
continue; fi
Und so ist das Folgende:
if [ $table = "Session" ]; then continue; fi
Während das Folgende einen Syntaxfehler erzeugt:
if [ $table = "Session" ]; then; continue; fi
Warum unterscheidet sich das then
Schlüsselwort von den anderen?
;
durch einnewline
und es funktioniert. Otoh, lass die Zeile mit wegcontinue
und du bekommst den Fehler. Lies die Quelle, Ben.Antworten:
Denn es
then
ist weder ein Befehl noch eine Shell eingebaut, sondern eigentlich ein Teil derif
Syntax. Vonman bash
:Also das:
funktioniert, weil beide
[ $table = "Session" ]
undcontinue
Befehle sind, die alleine stehen können; Sie bilden den jeweiligenlist
Teil desif
Befehls. Fügen Sie diese einfach in eine interaktive Shell ein und Sie werden sehen, dass sie keine Syntaxfehler verursachen:Auf der anderen Seite
then
ist es kein wirklicher Befehl, der für sich allein stehen kann:In den ersten beiden Beispielen verwenden Sie also
if
genau so, wie es in der Manpage beschrieben wird:Wenn Sie jedoch einen
;
Rückstand setzenthen
,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. :) :)quelle
Sie müssen nach einem Befehl ein Semikolon einfügen.
[ … ]
ist ein Befehl, wie er istcontinue
. Auf der anderen Seite,if
,then
undfi
sind keine Befehle: sie reservierte Worte sind.if
sieht aus wie ein Befehl, aber das liegt daran, dass fast immer genau ein Befehl folgt. Es ist gültig zu schreibendie auch auf verschiedene Arten dargestellt werden kann, wie z
Die allgemeine Syntax eines bedingten Befehls lautet
wo
;
oder eine neue Zeile abgeschlossen werden.Schlüsselwörter werden nur am Anfang eines Befehls als solche erkannt.
Ein bedingter Befehl muss mit dem Schlüsselwort enden
fi
. Dies beseitigt nicht die Notwendigkeit, von einem Bediener befolgt zu werden, wenn ein anderer Befehl danach angezeigt wird. Wenn auf die Bedingung beispielsweise ein anderer Befehl folgen soll, muss;
dazwischen eine oder eine neue Zeile stehen. Wenn die Bedingung im Hintergrund ausgeführt werden soll, muss sie gefolgt werden&
usw.quelle