
- •Содержание
- •Введение
- •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. Синтаксические
- •Список литературы
2.2. Как Shell находит команды.
Обычно интерпретатор Shell ищет команды, которые требуется выполнить в трех конкретных местах файловой системы. Сначала Shell пытается использовать имя команды в том виде, как оно указано. Если команда не найдена, то к имени добавляется /bin. Если это не помогает, по добавляется /usr/bin. Это означает, что поиск по порядку производится сначала в текущем каталоге, затем в каталоге /bin и после этого в каталоге /usr/bin. Например, команды pr и man могут быть на самом деле файлами с полными именами /bin/pr и /usr/bin/man. Можно указывать и более сложные пути для того, чтобы или поместить файл в конкретное место относительно текущего каталога пользователя, или чтобы обращаться к команде по ее полному имени. Если в команде имеется косая черта (/) (например /bin/sort dir/cmd), то к имени никаких путей для поиска добавляться не будет.
Поскольку текущий каталог обычно просматривается первым, пользователь может хранить в нем свою личную модификацию программы, которая не будет влиять на выполнение программ с таким же именем другими пользователями. Конкретная последовательность просмотра каталога может быть изменена переопределением переменной PATH.
3.Пример работы интерпретатора Shell.
Ниже приводится фрагмент программы Shell, связанный с обра-
боткой сигналов.
:
#
# Установка подпрограмм обработки сигналов
#
trap "echo
trap "echo
trap "echo
#
# Замечание: Если вы перешли в другой каталог, вы можете
# сбросить прерывание SIGQUIT с обнаружением файла "core".
# Для этого вставьте соответствующую строку после команды
# cd.
#
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
4.Специальные команды Shell.
Существует несколько специальных команд, являющихся внутрен-
ними для Shell. Некоторые из них мы уже рассмотрели. Интерпрета-
тору не требуется создавать под оболочку для выполнения этих ко-
манд и следовательно не создаются дополнительные процессы. Эти
команды рекомендуем использовать везде, где это возможно, т.к.
они работают быстрее и эффективнее, чем другие команды UNIX.
Некоторые из специальных команд мы уже рассмотрели, т.к. они
влияют на управление процессами. Это точка (.), break, continue,
exit и trap. Команда set также является специальной командой.
Описание остальных специальных команд приводится ниже:
: - Пустая команда. Она не делает ничего и может
использоваться для вставки комментариев в
процедуры. Ее код завершения равен 0 (true).
Все аргументы, передаваемые команде :, про-
веряются на синтаксические ошибки. Если вы-
дается сообщение об ошибке, заключите эти
аргументы в кавычки. Подстановка параметров
выполняется как и для любых других команд.
cd arg - Делает arg текущим каталогом. Если arg не
является каталогом или у пользователя нет
права доступа к нему, команда завершается с
ненулевым кодом завершения. Указание cd без
аргументов эквивалентно вводу "cd $HOME",
что возвращает вас в каталог загрузки.
exec arg - Если arg является командой, то Shell выпол-
няет ее, не создавая под оболочки. В команд-
ной строке допускаются аргументы переадреса-
ции ввода-вывода. Если указаны только аргу-
менты, перенаправляющие ввод-вывод, то
изменяются только ввод-вывод самого интерп-
ретатора Shell.
hash [-r] name - Этой командой запоминается место в пути по-
иска команды, указанной в name. Опция -r
указывает Shell, что старые значения можно
стереть. Если никаких аргументов не указыва-
ется, то выводится информация о запомненных
командах. Hits - это количество раз, которое
команда вызывалась Shell. Cost - это мера
затрат, необходимых для нахождения команды.
Бывают ситуации, требующие пересчета места
расположения команды.
newgrp arg - Команда newgrp при выполнении создает новый
интерпретатор Shell, который заменяет ста-
рый. Помните, что в новом Shell будут опре-
делены только переменные системы. Все пере-
менные, которые раньше были помечены как
экспортируемые, теперь станут обыкновенными.
pwd - Печатает текущий каталог.
read var - Из стандартного ввода считывается одна стро-
ка и первое слово интерпретируется как зна-
чение первой переменной, второе - как значе-
ние второй, и т.п. Все оставшиеся считанные
слова присваиваются последней переменной.
Код завершения равен нулю, если не был счи-
тан символ конца файла.
readonly var - Указанные переменные помечаются как пригод-
ные только для чтения, так что никаких после-
дующих переприсвоений им сделать нельзя. Если
никаких аргументов не указано, то выводится
список всех помеченных таким образом перемен-
ных и переменных, которые экспортируются.
return n - Вызывает возврат из функции с кодом заверше-
ния, равным n. Если n не указано, то код за-
вершения равен коду завершения последней вы-
полненной команды.
times - Печатает суммарное время, использованное
пользователем и процессами, запущенными из
текущей оболочки.
type name - Для каждого указанного имени показывает, как
оно будет интерпретироваться в случае, если
будет использоваться в качестве имени команды.
ulimit [ -f] n - Эта команда устанавливает предел размера за-
писываемого файла равным n блоков. Флаг -f
устанавливает этот предел для файлов, записы-
ваемых дочерними процессами (считываться мо-
гут файлы любого размера). Команда, указанная
без аргумента, показывает текущий установлен-
ный предел.
umask nnn - Устанавливает маску для создания файлов поль-
зователя равной nnn. Если nnn отсутствует, то
печатается текущее значение маски. Эта бито-
вая маска используется для установки прав
доступа к файлам при их создании. Например,
значение маски, равное восьмеричному числу
137, соответствует следующей битовой маске и
правам доступа для создаваемого файла:
------------T----------T------T------
¦ ¦пользоват.¦группа¦другие¦
+-----------+----------+------+------+
¦восьмеричн.¦ 1 ¦ 3 ¦ 7 ¦
+-----------+----------+------+------+
¦бит. маска ¦ 001 ¦ 011 ¦ 111 ¦
+-----------+----------+------+------+
¦доступ ¦ rw- ¦ r- ¦ -— ¦
L-----------+----------+------+-------
unset name - Для каждого указанного имени удаляет соответ-
ствующую переменную или функцию. Переменные
PATH, PS1, PS2, MAILCHECK и IFS удалить нельзя.
wait n - Shell ждет завершения всех активных дочерних
процессов. Если n указано, то Shell ждет за-
вершения только указанного процесса. Код за-
вершения команды wait всегда равен 0, если не
указан аргумент n, в противном случае он ра-
вен коду завершения дочернего процесса n.