Синтаксис оболонки на основі префіксу. У ньому є пункти, введені спеціальними ключовими словами. Певні пропозиції мають узгоджуватися.
У whileциклі складається одна або кілька команд тестування:
test ; test ; test ; ...
і за допомогою однієї або декількох команд тіла:
body ; body ; body ; ...
Щось повинно сказати оболонці, що починається цикл. Ось мета цього whileслова:
while test ; test ; test ; ...
Але потім справи неоднозначні. Яка команда - початок тіла? Щось повинно вказувати на це, і ось що doробить префікс:
do body ; body ; body ; ...
і, нарешті, щось має вказувати на те, що останнє тіло було видно; спеціальне ключове слово doneробить це.
Ці ключові слова оболонки не вимагають розділення крапкою з комою, навіть у тому ж рядку. Наприклад, якщо ви закриєте кілька вкладених циклів, їх можна просто мати done done done ....
Швидше, крапка з комою знаходиться між ними, ... test ; body ... якщо вони знаходяться на одній лінії. Ця крапка з комою розуміється як термінатор: вона належить до test. Тому, якщо doключове слово вставлено між ними, воно має проходити між крапкою з комою та body. Якби він був з іншого боку крапки з комою, він був би неправильно вбудований у testсинтаксис команди, а не розміщений між командами.
Синтаксис оболонки спочатку був розроблений Стівеном Борном, а його натхненник Алгол . Борн так любив Алгол, що він використав безліч макросів C у вихідному коді оболонки, щоб зробити C схожим на Algol. Ви можете переглянути джерела оболонки, датовані 1979 року, з версії 7 Unix . Макроси є mac.h, і вони використовуються всюди. Наприклад ifзаяви надаються в якості IF... ELSE... ELIF... FI.