Die Shell-Syntax basiert auf einem Präfix. Es enthält Klauseln, die durch spezielle Schlüsselwörter eingeführt werden. Bestimmte Klauseln müssen zusammenpassen.
Eine while
Schleife besteht aus einem oder mehreren Testbefehlen:
test ; test ; test ; ...
und durch einen oder mehrere Körperbefehle:
body ; body ; body ; ...
Etwas muss der Shell mitteilen, dass eine while-Schleife beginnt. Das ist der Zweck des while
Wortes:
while test ; test ; test ; ...
Aber dann sind die Dinge nicht eindeutig. Welcher Befehl ist der Beginn des Körpers? Etwas muss darauf hinweisen, und das macht das do
Präfix:
do body ; body ; body ; ...
und schließlich muss etwas darauf hindeuten, dass der letzte Körper gesehen wurde; ein spezielles Schlüsselwort done
macht das.
Diese Shell-Schlüsselwörter erfordern keine Semikolon-Trennung, auch nicht in derselben Zeile. Wenn Sie beispielsweise mehrere verschachtelte Schleifen schließen, können Sie nur haben done done done ...
.
Das Semikolon steht vielmehr zwischen, ... test ; body ...
wenn sie sich in derselben Zeile befinden. Das Semikolon wird als Terminator verstanden: Es gehört zum test
. Wenn ein do
Schlüsselwort dazwischen eingefügt wird, muss es daher zwischen dem Semikolon und stehenbody
. Wenn es sich auf der anderen Seite des Semikolons befindet, wird es fälschlicherweise in die test
Befehlssyntax eingebettet und nicht zwischen den Befehlen platziert.
Die Shell-Syntax wurde ursprünglich von Stephen Bourne entworfen und ist von Algol inspiriert . Borowski liebte Algol so sehr, dass er viele C-Makros im Shell-Quellcode verwendete, um C wie Algol aussehen zu lassen. Sie können die Shell-Quellen von 1979 ab Version 7 Unix durchsuchen . Die Makros sind in mac.h
und sie werden überall verwendet. Beispielsweise werden if
Aussagen als IF
... ELSE
... ELIF
... wiedergegeben FI
.