Операционные системы. API для работы с файлами, каталогами и ФС

Слайд 2

Интерпретаторы команд UNIX Интерпретатор команд (shell, оболочка) – это утилита, позволяющая

Интерпретаторы команд UNIX
Интерпретатор команд (shell, оболочка) – это утилита, позволяющая

пользователю давать команды системе.
Команды могут быть встроенными в интерпретатор и внешними (выполняются путем запуска других программ). В системе UNIX интерпретаторы традиционно могут служить средством программирования – могут выполнять программы, написанные на их внутреннем языке. Такие программы называются командными файлами, или скриптами. Командный файл не компилируется, а непосредственно выполняется интерпретатором. Интерпретаторов в системе может быть несколько, каждый из них – это выполняемый файл, обычно размещаемый в каталоге «/bin», например:
/bin/sh – это обычно ссылка, но может быть и выполняемый файл, классический shell;
/bin/bash – Bourne again shell (модернизированный shell);
/bin/tcsh – turbo C-shell (использует синтаксис выражений, похожий на синтаксис языка С).
Интерпретатор является, как правило, первой программой, запускаемой при входе пользователя в систему. Для каждого пользователя можно индивидуально назначить стартовую программу, указав полный путь к ней в файле /etc/passwd (пользователям доступна команда chsh).

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

Слайд 3

Интерпретаторы команд UNIX (продолжение) Первый интерпретатор для UNIX был написан Томпсоном

Интерпретаторы команд UNIX (продолжение)
Первый интерпретатор для UNIX был написан Томпсоном

и уже давно не используется. В середине семидесятых годов 20 века появился Bourne shell (просто shell, sh). Его первые версии были написаны Стивеном Борном.
Немного позже появился C-shell (csh), интерпретатор, автором которого является Bill Joy. Этот интерпретатор стал альтернативой Bourne shell, причем имел несколько серьезных преимуществ.
Если говорить о классификации, то основным признаком является синтаксис командного языка: shell-like, cshell-like, или что-то другое.
Интерпретаторы отличаются по функциональности, размеру, скорости работы, синтаксису командного языка. В одной системе обычно присутствует несколько оболочек, и можно выбрать любую, которая подходит тому или иному пользователю, или в той или иной ситуации. Интерпретатор, используемый по умолчанию в Linux, называется bash.

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

Слайд 4

Интерпретатор команд C-shell Стандартное имя выполняемого файла - «/bin/csh». В Linux

Интерпретатор команд C-shell
Стандартное имя выполняемого файла - «/bin/csh». В Linux

он представлен клоном «/bin/tcsh», и стандартное имя ссылается на него. Синтаксис командного языка напоминает синтаксис языка С. Во многом оболочки для UNIX похожи, что облегчает задачу освоения нескольких оболочек.
Любой командный интерпретатор имеет примерно такую последовательность выполнения команд:
выдать строку-приглашение (не обязательно);
получить командную строку от пользователя или прочитать ее из файла;
разбить строку на слова, при этом ищутся разделители слов;
разбить строку на команды (ищутся разделители команд);
выполнить подстановки (преобразования строки, заданные специальными символами);
проанализировать первое слово (имя) команды, возможные варианты:
- внутренняя;
- внешняя;
- не найдена;
запустить команду на выполнение (и передать ей указанные параметры);
ждать завершения команды (не обязательно);
получить код завершения команды (возможно, асинхронно, то есть в любой момент);
перейти к пункту 1 или 2.

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

Слайд 5

Лексическая структура языка C-shell Интерпретатор различает обычные символы, разделители слов и

Лексическая структура языка C-shell
Интерпретатор различает обычные символы, разделители слов

и метасимволы. Разделители позволяют разбить строку на слова, они также могут иметь специальное значение. Метасимволы имеют специальное значение, они обозначают операции, но не разделяют строку на слова.
Разделители слов: ; ( ) < > & | <таб> <прб>
Метасимволы: ~ ` ' " ! @ # $ % ^ : & * | , . ? { } [ ] \
Знаки арифметических, логических операций и операций сравнения распознаются только в соответствующем контексте.
Кавычки формируют строки, которые являются логически неделимыми операндами для команд.
"string" – внутри такой строки интерпретатор выполнит подстановки, заданные метасимволами. Есть исключения, например, двойные кавычки экранируют специальное значение символа '*' для интерпретатора.
'string' – внутри такой строки большинство метасимволов теряют свое значение, строка передается в команду без изменений. Для «экранирования» единичных метасимволов удобно также использовать символ '\' (backslash).
`string` - эта строка считается командой, выполняется и заменяется на стандартный вывод, полученный в результате выполнения.
Пример использования подстановки результата выполнения команды:
cat `find /home/ -name bash.history`

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