La sintassi della shell si basa sul prefisso. Ha clausole introdotte da parole chiave speciali. Alcune clausole devono andare insieme.
Un while
ciclo è composto da uno o più comandi di test:
test ; test ; test ; ...
e con uno o più comandi del corpo:
body ; body ; body ; ...
Qualcosa deve dire alla shell che inizia un ciclo while. Questo è lo scopo della while
parola:
while test ; test ; test ; ...
Ma poi, le cose sono ambigue. Quale comando è l'inizio del corpo? Qualcosa deve indicarlo, ed è quello che fa il do
prefisso:
do body ; body ; body ; ...
e, infine, qualcosa deve indicare che l'ultimo corpo è stato visto; una parola chiave speciale lo done
fa.
Queste parole chiave della shell non richiedono la separazione di punti e virgola, anche sulla stessa riga. Ad esempio, se chiudi diversi loop nidificati, puoi semplicemente avere done done done ...
.
Piuttosto, il punto e virgola è compreso tra ... test ; body ...
se sono sulla stessa riga. Quel punto e virgola è considerato un terminatore: appartiene al test
. Pertanto, se do
viene inserita una parola chiave tra loro, deve passare tra il punto e virgola e body
. Se fosse dall'altra parte del punto e virgola, verrebbe inserito erroneamente nella test
sintassi del comando, anziché collocato tra i comandi.
La sintassi della shell è stata originariamente progettata da Stephen Bourne ed è ispirata ad Algol . Bourne adorava Algol così tanto che usò molte macro C nel codice sorgente della shell per far sembrare C simile ad Algol. Puoi sfogliare le fonti shell datate 1979 dalla versione 7 Unix . Le macro sono presenti mac.h
e vengono utilizzate ovunque. Per esempio if
le dichiarazioni sono resi come IF
... ELSE
... ELIF
... FI
.