Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
UNIX_podibni_OS / Unix подобные ОС Лекции.doc
Скачиваний:
86
Добавлен:
17.03.2016
Размер:
4.03 Mб
Скачать

Служебные символы

Из предыдущих разделов видно, что некоторые символы используются в качестве команд самой командной оболочке, например, символы перенаправления ввода/вывода — служебные символы. Поскольку служебные символы адресованы самой командной оболочке, то при обработке командной строки они из нее «изымаются» и не передаются выполняющейся команде. Чтобы передать команде параметр, содержащий служебные символы, необходимо их тем или иным способом экранировать. Один из способов экранирования — заключение параметра в одинарные или двойные кавычки . Другой распространённый способ — постановка символа обратной косой черты (\) непосредственно перед служебным символом.

Рисунок 2.10. служебные символы

Рассмотрим основные группы служебных символов командной оболочки:

Символы-разделители

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

Символы пути

Используются для разделения элементов пути. Сюда можно отнести символ корня («/») и символ домашней директории («~») — в командной строке он автоматически заменяется на полный путь к домашней директории.

Символы команд

Применяются в аргументах команд, для отделения нескольких команд, для запуска процессов на заднем фоне и т.п. К таким символам можно отнести: «*», «&», «<», «>», «;», «(», «)», «|», «"».

Символы управления переменными

Используются для задания («=») и подстановки («$») значений переменных среды. При этих символах в именах файлов, необходимо предварять их знаком обратной косой («\»).

ESC-символы

Для использования перечисленных выше специальных символов в именах файлов, необходимо перед ними использовать знак обратной косой: «\&», «\;» и т. п. К этой же группе относятся специальные ASCII-символы, зарезервированные для команд вывода текста, например, символ возврата каретки или табуляции («\n» и «\t» соответственно).

Процесс выполнения команды

Рисунок 2.11. исполнение команды

Командная оболочка — это обычный процесс в операционной системе UNIX. Когда пользователь вводит команду (например, по нажатию Enter), командная оболочка выполняет следующие действия:

  1. анализ команды: выделение имени, параметров и аргументов;

  2. если это сокращение (alias), то оно раскрывается и анализ команды продолжается;

  3. если это встроенная команда, для неё вызывается функция-обработчик;

  4. если это внешняя команда:

    1. производится поиск программы с соответствующим именем;

    2. создаётся дочерний процесс оболочки (системный вызов fork);

    3. в дочернем процессе запускается необходимая команда с расшифрованными параметрами и аргументами (системный вызов exec);

    4. оболочка контролирует выполнение дочернего процесса, передаёт ему сигналы и ввод пользователя, ожидает его завершения (системный вызов wait);

  5. результаты работы возвращаются пользователю, отображается приглашение — он может вводить следующую команду.

Возвращаемое значение

Каждый процесс при завершении возвращает своему родительскому процессу специальный код завершения программы. Этот код может использоваться для получения результата выполнения программы и для проверки корректности её выполнения (возврата кода ошибки).

Традиционно для UNIX, в случае успешного выполнения программа (а также большинство системных функций) возвращает значение 0. Другие значения (все, отличные от 0) означают тот или иной вид ошибки. Так как программы часто выводят информацию об ошибках через специальный поток вывода ошибок (stderr), возвращаемые значения чаще всего могут принимать только два значения: «ноль» и «не ноль».

Рисунок 2.12. возвращаемое значение