Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции - Терехин.doc
Скачиваний:
6
Добавлен:
13.11.2019
Размер:
521.73 Кб
Скачать

Командный интерпретатор shell (командные языки и интерфейс работы с пользователем)

Для многих пользователей программного обеспечения основным и единственным свойством, на которое обращает внимание пользователь, является не внутреннее устройство системы, а тот интерфейс, который предоставляется системой пользователю. В UNIX существует много интерфейсов (алфавитно - цифровой, графический).

Лицо, паспорт системы - это командно - пользовательский интерфейс. В UNIX существует группа интерпретаторов команд (производные SHELL).

При выполнении команд мы имеем дело с буфером интерпретатора команд, а не с ядром. Интерпретатор - это обычная программа, которая не принадлежит ядру UNIX и ее можно заменить, т.е. написать свой собственный интерпретатор.

П ользователь SH ядро

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

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

Первый процесс SHELL запускается при входе пользователя в систему. Второй - запускается только один раз.

ОС UNIX поддерживает любое количество интерпретаторов команд. В файле /etc/passwd/ одно из полей, относящихся к данному пользователю, содержит полное имя интерпретатора команд, который должен быть запущен при входе пользователя в систему. В общем случае, при входе пользователя в систему может быть запущена абсолютно любая программа.

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

If (fork()==0)

execlp()(“bin/sh”, “sh”, “-c”, commandl, 10, 0);

wait();

Стоит ожидание ввода команды с терминала, когда ввод завершен, управление передается процессу SHELL. Далее командная строка анализируется и преобразуется для последующего использования exec. Если выполнение команды fork произошло успешно, то начинается выполнение самой программы. Далее опять организовано ожидание. Эта схема универсальна.

Интерпретация

Shell разделяет имя команды и аргументы на строки. Command arg1 arg2 (анализ и выполнение). Далее ожидание следующего ввода. Задача. 1 Переориентация ввода, вывода (login открывает 3 файла - 0, 1, 2) => ls > file или => ls < file. 2. Организация конвейера (несколько команд связать в одну команду) => who sort. 3. Различают понятие метасимвола -

> - в файле;

< - из файла.

Рассмотрим примеры записей.

- a;b - сначала происходит выполнение команды a, затем - выполнение команды b.

- A&B - вторая команда запустится, не дожидаясь завершения первой команды.

- * - произвольное количество символов.

- ? - один символ.

- ‘ ‘ - непосредственное использование записи, заключенной в апострофы.

- echo - повторить свои аргументы.

  1. Как имея набор команд создать новые команды со своими именами?

Пример. Сосчитать число пользователей при помощи конвейера.

  • who wc -l. who - определяет имя того, кто работает в системе, wc считает число строк для каждого файла. Первый шаг. Необходимо создать обычный файл A, который содержит в себе смысл этого конвейера или этой цепочки.

  • echo who: wc -l>a

  • sh<a

Интерпретатор берет входной поток из файла, однако каждый раз вызывать sh неудобно. Если файл предназначен для выполнения и содержит текст, то интерпретатор считает, что файл состоит из команд, следовательно - это командный файл. .В этом случае интерпретатор считывает строки из командного файла и выполняет их так, если бы они вводились с терминала.