1.10 Элементы программирования оболочки
В предыдущих главах мы рассматривали язык оболочки с точки зрения, в основном, непосредственного исполнения вводимых команд. Теперь взглянем на него под другим углом: как на универсальный язык программирования, а на оболочку – как на интерпретирующую реализацию этого языка.
От универсального языка программирования ожидаются: средства описания структур данных (переменные), средства вычисления выражений и присвоения их значений переменным, средства организации последовательного, условного и циклического исполнения, средства декомпозиции программы на подпрограммы.
Все эти средства присутствуют в стандартном языке оболочки[61]. Его особенностью явяется возможность использовать команды (стандартные и нестандартные) ОС в качестве своего рода «вызовов функций» (хотя и определение, и вызов функции также присутствуют в языке как отдельный механизм).
При попытках реализовать «простые программы из учебников» на языке оболочки результат часто оказывается не самым изящным. Однако этот язык очень хорошо приспособлен для решения административных и системных задач. В большинстве открытых ОС значительная часть самой системы написана на этом языке.
Пределы главы позволяют лишь бегло представить механизмы языка оболочки, проиллюстрировав их несколькими примерами.
Комментарии и указание оболочки
Часть любой строки, начинающаяся со знака «#» вплоть до символа новой строки является комментарием и не исполняется оболочкой. Как и в других языках программирования, комментарии предназначены для передачи какой-либо неочевидной из текста самой программы информации ее читателю.
Во многих системах (включая «ГНУ/Линукс») специальная нестандартная форма комментария может использоваться также для передачи ядру системы информации о том, какую именно оболочку использовать для интерпретации сценария. Такой комментарий имеет вид символов «#!», за которыми слитно следует имя исполняемого файла (обычно «/bin/sh», «/bin/bash» или «/usr/bin/bash»), и должен начинать файл сценария, то есть находиться в первой строке.
Информация из специального комментария востребуется только если файлу сценария придан атрибут исполняемого, а его выполнение инициировано указанием имени файла в качестве команды ОС. Если сценарий запускается на выполнение явным вызовом дополнительного экемпляра оболочки (например, «/usr/bin/bash