55
Основные понятия языка shell
В дальнейшем изложении слово shell будет употребляться в двух
смыслах - как имя языка программирования и как название командного
интерпретатора.
Для нас shell важен прежде всего как мощный язык мобильного
программирования. Предваряя дальнейшее изложение, отметим
имеющиеся в нем возможности комбинирования команд с помощью
конвейеров, подстановки значений переменных и результатов
выполнения команд, генерации имен файлов по шаблонам.
Свойства shell как интерактивного командного интерпретатора,
непосредственно взаимодействующего с пользователем, хранение и
использование истории сеанса, возможности редактирования командной
строки и т.п., на ваш взгляд, менее актуальны, поскольку современный
пользовательский интерфейс строится на иной основе.
Выделим основные понятия языка shell на лексическом уровне.
Под пробелом в дальнейшем понимается не только собственно
пробел, но также и символ табуляции.
Слово - это лексема, отличная от знака операции.
Имя - последовательность букв, цифр, символов подчеркивания,
начинающаяся с буквы или подчеркивания.
Параметр - имя, цифра или любой из символов *, @, #, ?, -, $, !.
Комментарий - лексема, начинающаяся с символа #, а также вся
последующая часть строки.
На синтаксическом уровне различаются несколько видов команд.
Простая команда - последовательность полей с разделителями
(обычно пробелами) между ними. Первое поле определяет имя команды,
которая будет выполняться; оставшиеся поля, за исключением
присваиваемых параметрам и перенаправления ввода/вывода (см. далее),
передаются команде в качестве аргументов. Имя команды передается
как аргумент 0.
Значение простой команды - ее код завершения.
Команда - это либо простая команда, либо одна из управляющих
конструкций (см. далее). Кодом завершения команды является код
завершения последней выполненной простой команды.
Конвейер - последовательность команд, разделенных знаком |.
Стандартный вывод всех команд, кроме последней, направляется на
стандартный ввод следующей команды конвейера. Каждая команда
выполняется как самостоятельный процесс; shell ожидает завершения
последней команды, код завершения которой становится кодом
завершения конвейера. Формально будем считать простую команду
частным случаем конвейера.
Список - последовательность из одного или нескольких
разделенных символами ;, &, && или || конвейеров, она может
заканчиваться символами ; или &. Из четырех указанных операций ; и &