Интерпретатор командного языка 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. 4. Выполнение shell-программ 4.1. Запуск shell'а

Программа, интерпретирующая 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