Интерпретатор команд Shell как программа UNIX, которая поддерживает обладающий большими возможностями командный язык. Метасимволы, синтаксис и зарезервированные слова. Правила программирования в Shell, основные команды и создание командных оболочек.
Аннотация к работе
Когда пользователи входят в систему UNIX, они общаются с одним из интерпретаторов команд. В этой главе изучается интерпретатор команд Shell. Каждый вызов этого интерпретатора называется оболочкой Shell; каждая оболочка выполняет единственную функцию - считывает со стандартного устройства ввода команду и выполняет ее. Поскольку Shell дает пользователю возможность общаться с операционной системой на языке высокого уровня, UNIX может выполнять задачи, недоступные менее сложным операционным системам. Команды, которые обычно должны писаться на традиционных языках программирования, здесь могут быть записаны в нескольких строчках процедуры Shell.Shell - первая программа с которой по существу начинается работа пользователя. После ввода логина и пароля пользователем запускается программа, указанная в последнем поле записи пользователя. Shell считывает ввод пользователя, производит синтаксический анализ введенной строки и выполняет действие, предписанное пользователем или сообщает об ошибке. По окончании работы пользователь вводит команду exit и выходит из системы.Первый аргумент (с порядковым номером 0) определяет имя команды, которая должна быть выполнена. Если первый аргумент команды определяет имя файла, который помечен выполняемым (что определяется по значениям соответствующих битов разрешения этого файла) и действительно является скомпилированной программой, то Shell, как родитель, создает процесс-потомок, который немедленно начинает выполнять эту программу. Если файл помечен как выполняемый, но не является скомпилированной программой, то предполагается, что это процедура Shell, т.е. обычный текстовый файл, содержащий строки с командами Shell.Возвращает нулевой код завершения. file Shell читает и выполняет команды из файла file, затем завершается; при поиске file используется список поиска $PATH. break [n] - Выход из внутреннего for или while цикла; если указано n, то выход из n внутренних циклов. continue [n] - Перейти к следующей итерации внутреннего for или while цикла; если указано n, то переход к следующей итерации n-ого цикла. cd [] - Сменить текущую директорию на директорию . ] - Аргументы читаются, как если бы они поступали из стандартного ввода и рассматриваются как команды, которые тут же и выполняются. exec [... ] - Аргументы рассматриваются как команды shell"а и тут же выполняются, но при этом не создается нового процесса. В качестве аргументов могут быть указаны направления ввода-вывода и, если нет никаких других аргументов, то будет изменено лишь направление ввода-вывода текущей программы. exit [n ] - Завершение выполнения shell"а с кодом завершения n. Если не указан ни один аргумент, то выводится информация о запомненных командах: hits - количество обращений shell"а к данной команде; cost - объем работы для обнаружения команды в списке поиска; command - полное имя команды.Ниже приводится фрагмент программы Shell, связанный с обработкой сигналов. # trap "echo echo "Going into loop0 while true do cd /tmp trap "echo lf cd /usr trap "echo lf sleep 1 done echo "Leaving the loop 0 exit 0Интерпретатору не требуется создавать под оболочку для выполнения этих команд и следовательно не создаются дополнительные процессы. Эти команды рекомендуем использовать везде, где это возможно, т.к. они работают быстрее и эффективнее, чем другие команды UNIX. Указание cd без аргументов эквивалентно вводу "cd $HOME", что возвращает вас в каталог загрузки. exec arg - Если arg является командой, то Shell выполняет ее, не создавая под оболочки. Если указаны только аргументы, перенаправляющие ввод-вывод, то изменяются только ввод-вывод самого интерпретатора Shell. hash [-r] name - Этой командой запоминается место в пути поиска команды, указанной в name. Если n не указано, то код завершения равен коду завершения последней выполненной команды. times - Печатает суммарное время, использованное пользователем и процессами, запущенными из текущей оболочки. type name - Для каждого указанного имени показывает, как оно будет интерпретироваться в случае, если будет использоваться в качестве имени команды. ulimit [-f] n - Эта команда устанавливает предел размера записываемого файла равным n блоков.В этом разделе приводятся стратегии написания эффективных процедур Shell, которые не тратят лишние ресурсы при выполнении поставленных задач. Акцент всегда должен ставиться на простоту, ясность и удобочитаемость, но эффективность может быть достигнута при использовании определенных стратегий программирования. Создание процедуры Shell состоит из таких же шагов, как и написание обычных программ: написания текста, определения его размера и оптимизации только отдельных важных частей.6.1 Запуск shell"а Программа, интерпретирующая shell-программы, находится в файле /bin/sh.Если имя команды совпадает с именем специальной команды, то она выполнается в рамках текущего процесса. Если имя команды не совпадает ни с именем специальной команды, ни с именем функции, то порождается новый процесс и осущест
План
Содержание
Введение
1. Основные положения Shell
2. Команды и создание командных оболочек
2.1 Команды
2.2 Как Shell находит команды
3. Пример работы интерпретатора Shell
4. Специальные команды Shell
5. Правила программирования в Shell
6. Выполнение shell-программ
6.1 Запуск shell"а 6.2 Выполнение
6.3 Окружение
6.4 Сигналы
6.5 Замечания
7. Число генерируемых процессов
8. Метасимволы, синтекс и зарезервированные слова
8.1 Синтаксис Shell
8.2 Синтаксические
8.3 Шаблоны
8.4 Подстановки
8.5 Квотирование
8.6 Зарезервированные слова
Заключение
Список литературы
Введение
Когда пользователи входят в систему UNIX, они общаются с одним из интерпретаторов команд. В этой главе изучается интерпретатор команд Shell. Этот интерпретатор является программой UNIX, которая поддерживает обладающий большими возможностями командный язык. Каждый вызов этого интерпретатора называется оболочкой Shell; каждая оболочка выполняет единственную функцию - считывает со стандартного устройства ввода команду и выполняет ее.
Поскольку Shell дает пользователю возможность общаться с операционной системой на языке высокого уровня, UNIX может выполнять задачи, недоступные менее сложным операционным системам. Команды, которые обычно должны писаться на традиционных языках программирования, здесь могут быть записаны в нескольких строчках процедуры Shell. В других операционных системах команды выполняются в прямой последовательности.
В UNIX благодаря Shell команды могут: - объединяться для образования новых команд;
- передавать позиционные параметры;
- добавляться или переименоваться пользователем;
- выполняться внутри циклов или по определенному условию;
- создаваться для локального выполнения без риска вступления в конфликт с командами других пользователей;
- выполняться в фоновом режиме.
Более того, команды могут перенаправлять ввод исходных данных для команды от одного источника к другому и перенаправлять вывод в файл, на терминал, принтер или другой команде. Это обеспечивает необходимую гибкость при выполнении конкретных задач.