[ Страница назад | Страница вперед | Содержание | Индекс | Домой | Юридическая информация | Поиск ]

Руководство пользователя: Операционная система и устройства


Команды оболочки Korn (POSIX)

Каждую команду оболочки Korn можно отнести к одному из следующих типов:

После ввода команды оболочка Korn (POSIX) анализирует ее и выполняет следующие действия:

Если в команде нет символа косой черты, оболочка Korn (POSIX) выполняет следующие действия:

Оболочка Korn (POSIX) пытается найти выполняемый файл во всех каталогах, указанных в переменной PATH. Имена каталогов в этой переменной разделяются символом : (двоеточие). По умолчанию значение этой переменной - /usr/bin: (каталог /usr/bin, затем текущий каталог). Текущий каталог в переменной PATH обозначается двумя символами двоеточия, если он находится в середине списка, или одним двоеточием, если он находится в начале или конце списка. Текущий каталог в переменной PATH обозначается двумя символами двоеточия, если он находится в середине списка, или одним двоеточием, если он находится в начале или конце списка.

Если указанный файл не является каталогом, его имя отлично от a.out, и при этом разрешено его выполнение, то оболочка предполагает, что в нем содержатся команды оболочки. Для выполнения такого файла оболочка порождает свою копию. Все неэкспортируемые псевдонимы, функции и именованные параметры не передаются в файл при его выполнении. Если для файла с командами оболочки разрешено чтение или установлен один из битов setuid и setgid, то оболочка запускает специальный агент, который устанавливает необходимые права доступа, запускает копию оболочки и передает ей на вход данный файл. Если команда указана в скобках, то при ее выполнении из среды не удаляются неэкспортируемые объекты (псевдонимы и т.п.)

В этом разделе приведена информация по следующим темам:

Составные команды оболочки Korn

Команды, содержащие символ конвейера и состоящие из списка простых команд или начинающиеся со служебных слов, называются составными. Как правило, составные команды (например, if, while или for) применяются в сценариях оболочки.

Список составных команд оболочки Korn (POSIX)


for Идентификатор [ in Слово ...] ;do команды ;done При каждом выполнении команды for параметру идентификатор присваивается следующее слово из списка in слово... Если параметр in слово... не указан, то команда for выполняет команды, указанные в параметре do команды, один раз для каждого определенного позиционного параметра. Выполнение завершается после обработки последнего слова в списке или последнего позиционного параметра. Дополнительная информация о позиционных параметрах приведена в разделе "Подстановка параметров в оболочке Korn (POSIX)".
select Идентификатор [in Слово ...] ;do команды ;done Команда select выдает в stderr (файл с дескриптором 2) указанные слова с порядковым номером перед каждым из них. Если параметр inслово... не указан, то выдается список позиционных параметров. Выдается приглашение PS3, после чего из стандартного ввода считывается одна строка. Если в этой строке указан номер одного из перечисленных значений, то переменной идентификатор присваивается данное слово.

Если из стандартного ввода будет считана пустая строка, то будет повторно выдан список вариантов. В противном случае параметру идентификатор будет присвоено пустое слово. Строка, считанная из стандартного ввода, сохраняется в параметре REPLY. Параметр команды выполняется для каждого выбранного варианта до тех пор, пока не будет нажата клавиша прерывания или не встретится символ конца файла. Дополнительная информация о позиционных параметрах приведена в разделе "Подстановка параметров в оболочке Korn (POSIX)".
case слово in [[ ( ] шаблон [ | шаблон] ... ) команды ;;] ... esac Команда case выполняет параметр команды для первого параметра шаблон, соответствующего параметру слово. Шаблоны должны быть указаны в формате, который применяется при подстановке имен файлов.
if команды ;then список [elif команды ;then команды] ... [;else команды] ;fi Параметр команды задает список выполняемых команд. Сначала оболочка выполняет команды, указанные в параметре ifкоманды. Если в результате будет получен нулевой код завершения, то будут выполнены команды, указанные в параметре thenкоманды. В противном случае будут выполнены команды, указанные в параметре elif команды.

Если последняя команда в списке elifкоманды завершится с кодом 0, то будут выполнены команды из соответствующего блока thenкоманды. Если код завершения последней команды из параметра thenкоманды равен нулю, то выполняются команды из параметра elseкоманды. Если блок команды не будет выполнен ни для одного параметра else и then, то команда if завершится с кодом 0.
while команды ;do команды ;done  
until команды ;do команды ;done Параметр команды задает список выполняемых команд. Команда while выполняет в цикле команды, указанные в параметрах команды. Если код завершения последней команды в списке while команды равен нулю, то выполняются команды из списка do команды. Если код завершения последней команды в списке whileкоманды отличен от нуля, то выполнение цикла завершается. Если команды из списка do команды не были выполнены ни разу, то команда while завершается с кодом 0. Команда until применяется вместо команды while в случаях, когда нужно изменить условие выхода из цикла на противоположное.
( команды) Параметр команды задает список выполняемых команд. Оболочка выполнит команды в отдельной среде.

Примечание: Если необходимо указать две открывающие скобки подряд (для вложенного выполнения команд), то между ними должен быть указан пробел. Две скобки подряд без разделяющего пробела интерпретируются как арифметическое выражение.
{ команды; } Параметр команды задает список выполняемых команд. Оболочка выполнит указанные команды.

Примечание: В отличие от команды ( ) , в команде { } распознаются зарезервированные символы. Зарезервированные символы должны указываться в начале строки или после символа ; .
[[выражение]] Вычисляет значение параметра выражение. Если оно истинно, команда завершается с кодом 0.
function идентификатор r{ команды ;} или function идентификатор () {список ;} Определяет функцию с именем, указанным в параметре идентификатор. Тело функции - список команд, заключенный в символы { и }. Символы () представляют два отдельных оператора, поэтому между параметром идентификатор и символами ( и ) можно указывать пробелы, хотя это не обязательно.
time конвейер Выполняет команды, указанные в параметре конвейер. В stderr выдается информация о том, сколько времени было затрачено на их выполнение (отдельные значения для полного, системного и пользовательского времени).

Функции

Зарезервированное слово function предназначено для определения функций оболочки. Оболочка считывает определение функции и сохраняет его в текущей среде. При разборе определений функций разворачиваются псевдонимы. Оболочка выполняет функции точно так же, как команды, и передает в них аргументы как позиционные параметры. Дополнительная информация о позиционных параметрах приведена в разделе Подстановка параметров в оболочке Korn (POSIX).

Оболочка Korn (POSIX) выполняет функции в среде, из которой они вызываются. Следующие объекты являются общими для функции и сценария, из которого она вызвана, и их изменение приводит к побочным эффектам:

Следующие объекты функции не связаны с соответствующими объектами сценария, из которого была вызвана функция, и их изменение не приводит к побочным эффектам:

Примечание: В ранних версиях оболочки Korn прерывания, отличные от EXIT и ERR, были общими для функции и сценария, из которого она была вызвана.

Если прерывание 0 или EXIT сработает внутри тела функции, соответствующее действие будет выполнено после завершения функции в среде, из которой она была вызвана. Если прерывание сработает вне тела функции, соответствующее действие будет выполнено после выхода из оболочки Korn. В ранних версиях оболочки Korn прерывания 0 и EXIT, сработавшие вне тела функции, не выполнялись после завершения работы оболочки.

При выполнении функций действуют все правила присвоения переменных и обработки синтаксических ошибок, описанные в разделе "Встроенные команды оболочки Korn (POSIX)."

Если имя функции будет указано в качестве простой команды, то фактически будет выполнена составная команда. Операнды этой простой команды на время выполнения составной команды станут ее позиционными параметрами. Кроме того, значение особого параметра # будет изменено в соответствии с числом операндов. Особый параметр 0 остается без изменения.

Для возврата управления из тела функции применяется особая команда return. Кроме того, управление автоматически возвращается в вызывающий сценарий в случае ошибки в теле функции.

Список определенных функций можно просмотреть с помощью команды typeset с флагом -f или +f. Если будет указана опция -f, то помимо имен будет показан текст функций. Для того чтобы аннулировать определение функции, нужно выполнить особую команду unset с флагом -f.

По умолчанию определения функций аннулируются при выполнении сценариев оболочки. Флаг -xf особой команды typeset позволяет экспортировать функции в сценарии, выполняемые в текущем экземпляре оболочки. Если какая-либо функция должна действовать в различных экземплярах оболочки, ее определение нужно указать в файле ENV с опцией -xf команды typeset.

При разборе определения функции код завершения 0 устанавливается в случае, если оболочке не удалось объявить функцию. В противном случае код завершения будет больше нуля. Код завершения функции равен коду завершения последней выполненной в ней команды.


[ Страница назад | Страница вперед | Содержание | Индекс | Домой | Юридическая информация | Поиск ]