La sintassi della shell si basa sul prefisso. Ha clausole introdotte da parole chiave speciali. Alcune clausole devono andare insieme.
Un whileciclo è 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 whileparola:
while test ; test ; test ; ...
Ma poi, le cose sono ambigue. Quale comando è l'inizio del corpo? Qualcosa deve indicarlo, ed è quello che fa il doprefisso:
do body ; body ; body ; ...
e, infine, qualcosa deve indicare che l'ultimo corpo è stato visto; una parola chiave speciale lo donefa.
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 doviene 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 testsintassi 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.he vengono utilizzate ovunque. Per esempio ifle dichiarazioni sono resi come IF... ELSE... ELIF... FI.