Интерпретатор командного языка shell
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: реферати українською, реферат по физике
| Добавил(а) на сайт: Дубинкин.
Предыдущая страница реферата | 1 2 3
if then else elif fi case in esac { } for while until do done 3.7. Специальные команды
Как правило, для выполнения каждой команды shell порождает отдельный процесс. Специальные команды отличаются тем, что они встроены в shell и выполняются в рамках текущего процесса.
: | Пустая команда. Возвращает нулевой код завершения. | |
. file | Shell читает и выполняет команды из файла file, затем завершается; при поиске file используется список поиска $PATH. | |
break [n] | Выход из внутреннего for или while цикла; если указано n, то выход из n внутренних циклов. | |
continue [n] | Перейти к следующей итерации внутреннего for или while цикла; если указано n, то переход к следующей итерации n-ого цикла. | |
cd [ ] | Сменить текущую директорию на директорию . По умолчанию используется значение HOME. | |
echo [ ... ] | Выводит свои аргументы в стандартный вывод, разделяя их пробелами. | |
eval [ ... ] | Аргументы читаются, как если бы они поступали из стандартного ввода и рассматриваются как команды, которые тут же и выполняются. | |
exec [ ... ] | Аргументы рассматриваются как команды shell'а и тут же выполняются, но при этом не создается нового процесса. В качестве аргументов могут быть указаны направления ввода-вывода и, если нет никаких других аргументов, то будет изменено лишь направление ввода-вывода текущей программы. | |
exit [ n ] | Завершение выполнения shell'а с кодом завершения n. Если n опущено, то кодом завершения будет код завершения последней выполненной команды (конец файла также приводит к завершению выполнения). | |
export [ ... ] | Данные переменные отмечаются для автоматического экспорта в окружение (см. Окружение) выполняемых команд. Если аргументы не указаны, то выводится список всех экспортируемых переменных. Имена функций не могут экспортироваться. | |
hash [ -r ] [ ... ] | Для каждой из указанных команд определяется и запоминается путь поиска. Опция -r удаляет все запомненные данные. Если не указан ни один аргумент, то выводится информация о запомненных командах: hits - количество обращений shell'а к данной команде; cost - объем работы для обнаружения команды в списке поиска; command - полное имя команды. В некоторых ситуациях происходит перевычисление запомненных данных, что отмечается значком * в поле hits. | |
pwd | Выводит имя текущей директории. | |
read [ ... ] | Читается из стандартного ввода одна строка; первое ее слово присваивается первой переменной, второе - второй и т.д., причем все оставшиеся слова присваиваются последней переменной. | |
readonly [ ... ] | Запрещается изменение значений указанных переменных. Если аргумент не указан , то выводится информация обо всех переменных типа readonly. | |
return [ n ] | Выход из функции с кодом завершения n. Если n опущено, то кодом завершения будет код завершения последней выполненной команды. | |
set [ --aefkntuvx [ ... ] ] | Команда устанавливает следующие режимы: | |
-a | отметить переменные, которые были изменены или созданы, как переменные окружения (см. Окружение) | |
-e | если код завершения команды ненулевой, то немедленно завершить выполнение shell'а | |
-f | запретить генерацию имен файлов | |
-k | все переменные с именем помещаются в окружение команды, а не только те, что предшествуют имени команды (см. Окружение) | |
-n | читать команды, но не выполнять их | |
-t | завершение shell'а после ввода и выполнения одной команды | |
-u | при подстановке рассматривать неустановленные переменные как ошибки | |
-v | вывести вводимые строки сразу после их ввода | |
-x | вывести команды и их аргументы перед их выполнением | |
-- | не изменяет флаги, полезен для присваивания позиционным переменным новых значений. | |
При указании + вместо - каждый из флагов устанавливает противоположный режим. Набор текущих флагов есть значение переменной $-. - это значения, которые будут присвоены позиционным переменным $1, $2 и т.д. Если все аргументы опущены, выводятся значения всех переменных. | ||
shift [ n ] | Позиционные переменные, начиная с $(n+1), переименовываются в $1 и т.д. По умолчанию n=1. | |
test | вычисляет условные выражения (см. Дополнительные сведения. Test ) | |
trap [ ] [ n ] ... | Команда будет выполнена, когда shell получит сигнал n (см. Сигналы). (Надо заметить, что проверяется при установке прерывания и при получении сигнала). Команды выполняются по порядку номеров сигналов. Любая попытка установить сигнал, игнорируемый данным процессом, не обрабатывается. Попытка прерывания по сигналу 11 (segmentation violation) приводит к ошибке. Если опущен, то все прерывания устанавливаются в их начальные значения. Если есть пустая строка, то этот сигнал игнорируется shell'ом и вызываемыми им программами. Если n=0, то выполняется при выходе из shell'а. Trap без аргументов выводит список команд, связанных с каждым сигналом. | |
type [ ... ] | Для каждого имени показывает, как оно будет интерпретироваться при использовании в качестве имени команды: как внутренняя команда shell'а, как имя файла или же такого файла нет вообще. | |
ulimit [ -f ] [ n ] | Устанавливает размер файла в n блоков; -f - устанавливает размер файла, который может быть записан процессом-потомком (читать можно любые файлы). Без аргументов - выводит текущий размер. | |
umask [ nnn ] | Пользовательская маска создания файлов изменяется на nnn. Если nnn опущено, то выводится текущее значение маски. Пример: после команды umask 755 будут создаваться файлы, которые владелец сможет читать, писать и выполнять, а все остальные - только читать и выполнять. | |
unset [ ... ] | Для каждого имени удаляет соответствующую переменную или функцию. Переменные PATH, PS1, PS2 и IFS не могут быть удалены. | |
wait [ n ] | Ждет завершения указанного процесса и выводит код его завершения. Если n не указано, то ожидается завершения всех активных процессов-потомков и возвращается код завершения 0. |
Программа, интерпретирующая shell-программы, находится в файле /bin/sh. При запуске ее первый аргумент является именем shell-программы, остальные передаются как позициональные параметры. Если файл, содержащий shell-программу, имеет право выполнения (x), то достаточно указания лишь его имени. Например, следующие две команды операционной системы эквивалентны (если файл ficofl обладает указанным правом и на самом деле содержит shell-программу):
sh ficofl -d . g*и ficofl -d . g* 4.2. ВыполнениеПри выполнении shell-программ выполняются все подстановки. Если имя команды совпадает с именем специальной команды, то она выполнается в рамках текущего процесса. Так же выполняются и определенные пользователем функции. Если имя команды не совпадает ни с именем специальной команды, ни с именем функции, то порождается новый процесс и осуществляется попытка выполнить указанную команду.
Переменная PATH определяет путь поиска директории, содержащей данную команду. По умолчанию это
::/bin:/usr/ bin:/util:/dss/rkДиректории поиска разделяются двоеточиями; :: означает текущую директорию. Если имя команды содержит символ /, значение $PATH не используется: имена, начинающиеся с / ищутся от корня, остальные - от текущей директории. Положение найденной команды запоминается shellом и может быть опрошено командой hash.
4.3. ОкружениеОкружение - это набор пар имя-значение, которые передаются выполняемой программе. Shell взаимодействует с окружением несколькими способами. При запуске shell создает переменную для каждой указанной пары, придавая ей соответствующее значение. Если вы измените значение какой-либо из этих переменных или создадите новую переменную, то это не окажет никакого влияния на окружение, если не будет использована команда export для связи переменной shell'а с окружением (см. также set -a). Переменная может быть удалена из окружения командой unset (см.). Таким образом, окружение каждой из выполняемых shell'ом команд формируется из всех неизмененных пар имя-значение, первоначально полученных shell'ом, минус пары, удаленные командой unset, плюс все модифицированные и измененные пары, которые для этого должны быть указаны в команде export.
Окружение простых команд может быть сформировано указанием перед ней одного или нескольких присваиваний переменным. Так,
TERM=d460 и (export TERM; TERM=d460; )эквивалентны. Переменные, участвующие в таких присваиваниях, назовем ключевыми параметрами.
Если установлен флаг -k (см. set), то все ключевые параметры помещаются в окружение команды, даже если они записаны после команды.
4.4. СигналыUNIX'ом поддерживаются следующие сигналы:
SIGHUP | - 1 - | отменить (hangup) |
SIGINT | - 2 - | прерывание (interrupt) |
SIGQUIT | - 3 - | нестандартный выход (quit) |
SIGILL | - 4 - | неверная команда (illegal instruction) |
SIGTRAP | - 5 - | ловушка (trace trap) |
SIGFPE | - 8 - | исключительная ситуация при выполнении операций с плавающей запятой (floating-point exception) |
SIGKILL | - 9 - | уничтожение процесса (kill) |
SIGBUS | - 10 - | ошибка шины (bus error) |
SIGSEGV | - 11 - | нарушение сегментации (segmentation violation) |
SIGSYS | - 12 - | неверный системный вызов (bad argument to system call) |
SIGPIPE | - 13 - | запись в канал без чтения из него (write on a pipe with no one to read it) |
SIGALRM | - 14 - | будильник (alarm clock) |
SIGTERM | - 15 - | программное завершение процесса (software termination signal) |
Сигналы SIGINT и SIGQUIT игнорируются, если команда была запущена асинхронно. Иначе сигналы обрабатываются так же, как в процессе-предке, за исключением сигнала SIGSEGV (см. также Специальные команды. Trap).
4.5. ЗамечанияПри выполнении команд запоминается их местонахождение. Поэтому при создании команды с тем же именем, но находящейся в другой директории, все равно будет выполняться старая команда (если вызов происходит по короткому имени). Для исправления ситуации воспользуйтесь командой hash с ключом -r (см. Специальные команды).
Если вы переименовали текущую или вышележащую директорию, то команда pwd может давать неверную информацию. Для исправления ситуации воспользуйтесь командой cd с полным именем директории.
5. Дополнительные сведения 5.1. Команда testКоманда test применяется для проверки условия. Формат вызова:
test или [ ]Команда test вычисляет и, если его значение - истина, возвращает код завершения 0 (true); иначе - ненулевое значение (false). Ненулевой код завершения возвращается и если опущены аргументы. может состоять из следующих примитивов:
-r файл | - истина, если файл существует и доступен для чтения |
-w файл | - истина, если файл существует и доступен для записи |
-x файл | - истина, если файл существует и является выполняемым |
-f файл | - истина, если файл существует и является обычным файлом |
-d файл | - истина, если файл существует и является директорией |
-c файл | - истина, если файл существует и является специальным символьно-ориентированным файлом |
-b файл | - истина, если файл существует и является специальным блок-ориентированным файлом |
-p файл | - истина, если файл существует и является именованным каналом (pipe) |
-s файл | - истина, если файл существует и имеет ненулевую длину |
-t [ дескриптор файла ] | - истина, если открытый файл с указанным дескриптором (по умолчанию 1) существует и ассоциирован с терминалом |
-z s1 | - истина, если длина строки s1 нулевая |
-n s1 | - истина, если длина строки s1 ненулевая |
s1 = s2 | - истина, если строки s1 и s2 совпадают |
s1 != s2 | - истина, если строки s1 и s2 не совпадают |
s1 | - истина, если s1 непустая строка |
n1 -eq n2 | - истина, если целые n1 и n2 алгебраически совпадают . На месте -eq могут быть также -ne, -gt, -ge, -lt, -le |
Команда expr применяется для вычисления выражений. Результат выводится на стандартный вывод. Операнды выражения должны быть разделены пробелами. Метасимволы должны быть экранированы. Надо заметить, что 0 возвращается в качестве числа, а не для индикации пустой строки. Строки, содержащие пробелы или другие специальные символы, должны быть заключены в кавычки. Целые рассматриваются как 32-битные числа.
Ниже приведен список операторов в порядке возрастания приоритета, операции с равным приоритетом заключены в фигурные скобки. Перед символами, которые должны быть экранированы, стоит .
| | если первое не пустое и не нулевое, то возвращает его, иначе возвращает второе | |
& | если оба не пустые и не нулевые, то возвращает первое , иначе возвращает 0 | |
{ =, >, >=, Скачали данный реферат: Краснопёров, Kondrakov, Averin, Каблуков, Снетков, Ялбачев, Бурцев. Последние просмотренные рефераты на тему: продажа рефератов, общение реферат, реферат охрана, развитие ребенка реферат. Категории:Предыдущая страница реферата | 1 2 3 Поделитесь этой записью или добавьте в закладки |