Руководство по Bash для начинающих
Назад Глава 1: Командная оболочка и скрипты Bash Вперед

Составляющие компоненты

Составляющие компоненты командной оболочки

Синтаксис командной оболочки

Если входные данные не закомментированы, командная оболочка прочитает их и разделит их на слова и операторы с учетом использования кавычек, с помощью которых задается смысл каждого элемента входных данных. Затем эти слова и операторы транслируются в команды и другие конструкции, возвращающие статусы завершения, которые можно будет проверять или обрабатывать. Описанная ранее схема создание нового процесса и его выполнения fork-and-exec будет использована только после того, как командная оболочка следующим образом проанализирует входные данные:

Команды командной оболочки

Простая команда оболочки, такая как touch file1 file2 file3, состоит из самой команды, за которой следуют аргументы, разделенные пробелами.

Более сложные команды оболочки состоят из простых команд, которые объединены друг с другом различным образом: с помощью конвейера, когда выход одной команды подключается ко входу второй команды, с помощью цикла, с помощью условной инструкции или еще каким-нибудь образом. Пара примеров:

ls | more 
gunzip file.tar.gz | tar xvf - 

Функции командной оболочки

Функции командной оболочки являются способом создания групп команд, выполнение которых впоследствии будет осуществляться обращением к единому для всей группы команд имени. Выполнение группы команд будет осуществляться точно так же, как и "обычных" команд. Когда имя функции используется в качестве имени простой команды, будут выполнены все команды в списке, связанном с именем этой функции.

Функции командной оболочки выполняются в контексте текущей оболочки; для их интерпретации новый процесс не создается.

Функции объясняются в главе 11 "Функции".

Параметры командной оболочки

Параметр — это сущность, в которой хранятся значения. Это может быть имя, номер или специальное значение. В случае с командными оболочками переменная является параметром, который запоминается по имени. Переменная имеет значение и может содержать ноль или большее количество атрибутов. Переменные создаются с помощью встроенной команды declare.

Если значение не задано, переменной присваивается строка со значением null. Переменные могут быть удалены только с помощью встроенной команды unset.

Присваивание значений переменным обсуждается в разделе "Переменные", дополнительные возможности использования переменных рассматриваются в главе 10 "Подробнее о переменных".

Расширенные возможности командной оболочки

После того, как командная строка будет разбита на лексемы, к ней применяются дополнительные действия (или расширения - shell expansions). Это следующие действия:

Мы подробно обсудим эти типы дополнительных действий "Расширения командной оболочки".

Перенаправление данных

Перед тем, как команда будет выполнена, ее входной и выходной потоки могут быть перенаправлены с помощью специальной нотации, интерпретируемой командной оболочкой. Перенаправление можно также использовать с тем, чтобы открывать и закрывать файлы в текущей среде исполнения командной оболочки.

Выполнение команд

Когда команда выполняется, та ее часть, которую парсер определяет как присваивание значений переменным (предшествующее имени команды) и перенаправление данных, сохраняются для последующего использования. Для той части команды, которая не участвует в присваивании значений переменным или в перенаправлении данных, выполняются все необходимые дополнительные действия; первое слово, оставшееся после выполнения действий, рассматривается как имя команды, а оставшаяся часть является аргументами этой команды. Затем выполняются действия по перенаправлению данных, затем переменным назначаются строковые значения. Если имени команды нет, то переменные изменят текущую среду командной оболочки.

Важной частью задач, которые выполняет командная оболочка, является поиск команд. Bash делает это следующим образом:

Скрипты командной оболочки

Когда файл, содержащий команды оболочки, используется при вызове Bash в качестве первого аргумента без параметров (т. е. без -c или -s), будет создана неинтерактивная оболочка. Эта оболочка сначала ищет файл со скриптом в текущем директории и, если он там не будет найден, ищет его затем с использованием переменной PATH.


Предыдущий раздел: Оглавление Следующий раздел:
Исполнение команд   Разработка хороших скриптов