Основы операционной системы UNIX



         

Структура командной строки


Командные строки рассматриваются по одной и имеют определенную структуру. Чтобы понять ее, рассмотрим ряд синтаксических определений:

<пробел> ::=

<символ пробела> | <символ табуляции>

<имя> ::=

<буква или подчеркивание> {<допустимый символ имени>}

<буква или подчеркивание> ::=

<буква> | _

<допустимый символ имени> ::=

<буква> | <цифра> | _

<параметр> ::=

<имя> | <цифра> | * | @ | # | ? | - | $ | !

<слово> ::=

<не пробел> {<не пробел>}

<простая команда> ::=

<слово> {<пробел> <слово>}

Итак, простая команда - это последовательность слов через пробел. Нажатие клавиши Enter при вводе команды или перевод строки при обработке сценария являются для командного интерпретатора признаком завершения команды. Она обрабатывается и выполняется.

Значением простой команды является ее статус выхода (см. ) в случае нормального завершения или (восьмеричное) 200+статус при ненормальном завершении.

Пример простой команды:

$ who oracle pts000 Aug 20 10:08 root console Aug 20 09:03 intdbi pts004 Aug 20 12:45 $

Из простых команд строятся более сложные конструкции: конвейеры и списки.

<конвейер> ::=

<команда> {| <команда>}

<список> ::=

<конвейер> {<разделитель> <конвейер>} [<терминатор команды>]

<разделитель> ::=

&& | | <терминатор команды>

<терминатор команды> ::=

; | &

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

$ ls | tee save | wc 15 15 100 $

Список - это последовательность одного или более конвейеров, разделенных ;, &, && или и, возможно, заканчивающаяся ; или &. Из этих четырех символов, ; и & имеют равный приоритет, который ниже, чем у && и (эти символы тоже имеют равный приоритет). Точка с запятой (;) вызывает последовательное выполнение предшествующего конвейера (т.е. командный интерпретатор ожидает окончания конвейера перед выполнением любых команд, следующих за точкой с запятой). Амперсанд (&) вызывает асинхронное выполнение предшествующего конвейера (т.е. командный интерпретатор не ожидает окончания работы конвейера). Символ && () ведет к тому, что следующий за ним список выполняется только в том случае, когда предыдущий конвейер вернул нулевой (ненулевой) статус выхода. В список может входить произвольное количество переводов строк и точек с запятой, разделяющих команды.




Содержание  Назад  Вперед