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

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


Подстановка параметров в оболочке Korn (POSIX)

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

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

Параметры в оболочке Korn

Параметрами называются:

Значения и атрибуты именованных параметров можно изменять с помощью команды typeset. Информация об атрибутах, поддерживаемых оболочкой Korn, приведена в описании особой встроенной команды typeset. Экспортированными называются параметры, значения и атрибуты которых передаются в среду после выполнения команды.

Значения именованных параметров можно изменять с помощью следующей команды:

Имя=Значение [ Имя=Значение ] ...

Если для параметра Имя будет задан атрибут -i (указывающий, что значение параметра - целое число), то для параметра Значение будет выполнено арифметическое вычисление. В разделе Арифметические вычисления в оболочке Korn (POSIX) (Арифметические вычисления в оболочке Korn (POSIX)) вы найдете дополнительную информацию о вычислении арифметических выражений.

Оболочка поддерживает одномерные массивы. К элементам массива можно обращаться по их номерам. Номер элемента может быть задан как арифметическое выражение, заключенное в квадратные скобки [ и ]. Для того чтобы присвоить значения всем элементам массива, нужно выполнить команду set -Aимя значение ... . Значения номеров элементов должны лежать в диапазоне от 0 до 511. Массивы не требуется объявлять. Для любого параметра всегда можно указать произвольный допустимый номер элемента, и при необходимости массив будет создан автоматически. Обращение к массиву без указания номера элемента равносильно обращению к элементу 0.

Позиционным параметрам значения присваиваются с помощью особой команды set. Параметру $0 присваивается значение аргумента 0 при вызове оболочки. Символ $ указывается для того, чтобы вместо имени параметра было подставлено его значение.

Подстановка параметров

Предусмотрены следующие операции подстановки параметров:

${Параметр} Оболочка считывает символы между ${ и } и интерпретирует их как одно слово, даже если в нем содержатся фигурные скобки или метасимволы. Вместо имени указанного в скобках параметра подставляется его значение. Фигурные скобки требуется указывать в случаях, когда после значения параметр стоят буква, цифра или знак подчеркивания (иначе они будут считаться частью имени параметра), а также при обращении к элементам именованного параметра-массива.

Если в имени параметра содержится хотя бы одна цифра, он называется позиционным параметром. Позиционные параметры, состоящие из нескольких цифр, должны заключаться в фигурные скобки. Если вам нужно обработать все позиционные параметры одновременно, укажите особый параметр * или @) - вместо него подставляются значения всех позиционных параметров, начиная с $1 (Значения параметров будут разделены символом разделения полей). Идентификатор массива с индексом (номером элемента) * или @ заменяется на значения всех элементов этого массива. substituted.

${#параметр} Если значение параметра - * или @, то подставляется количество позиционных параметров. В противном случае подставляется длина позиционного параметра с номером параметр.
${#идентификатор[*]} Заменяется на число элементов в массиве идентификатор.
${параметр:-значение} Если параметр определен и ему присвоено непустое значение, то подставляется его значение, в противном случае подставляется значение параметра значение.
${параметр:=значение} Если параметр не определен или ему присвоено пустое значение, то будет присвоено указанное значение. Этот способ нельзя применять для изменения значений позиционных параметров.
${параметр:?значение} Если параметр определен и ему присвоено непустое выражение, то подставляется его значение. В противном случае выдается указанное значение и работа оболочки завершается. Если значение не указано, то выдается стандартное сообщение.
${параметр:+значение} Если параметр определен, и ему присвоено непустое значение, то подставляется указанное значение. В противном случае подставляется пустое значение.
${параметр#шаблон} | ${параметр##шаблон} Если значение параметра начинается с указанного шаблона, то подставляется значение параметра за вычетом символов шаблона. В противном случае подставляется полное значение параметра. В первом формате из подставляемого значения удаляется шаблон минимальной возможной длины. Во втором формате из подставляемого значения удаляется шаблон максимальной возможной длины.
${параметр%шаблон} | ${параметр%%шаблон} Если значение параметра заканчивается на указанный шаблон, то подставляется значение параметра за вычетом символов шаблона. В первом формате из подставляемого значения удаляется шаблон минимальной возможной длины; во втором формате - шаблон максимальной возможной длины.

Во всех выражениях, указанных выше, параметр значение вычисляется только в случае, если оно должно быть подставлено. Таким образом, в следующем примере команда pwd будет выполнена только в случае, если флаг -d не определен или пуст:

echo ${d:-$(pwd)}

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

Предопределенные особые параметры

Значения следующих параметров автоматически задаются оболочкой:

@ Выдает значения позиционных параметров, начиная с $1. Параметры будут разделены пробелами.

Если вы заключите символы $@ в двойные кавычки ", то каждый позиционный параметр будет считаться отдельной строкой. Если не определен ни один позиционный параметр, то вместо $@ будет подставлена пустая строка.

* Выдает значения позиционных параметров, начиная с $1. Оболочка отделяет каждый параметр первым символом значения переменной IFS.

Если символы $* заключены в двойные кавычки " , то выданные значения позиционных параметров также будут заключены в двойные кавычки. Как и в первом случае, значения параметров будут разделены первым символом параметра IFS.

# Выдает число позиционных параметров, переданных в оболочку, не считая собственно имени процедуры оболочки. Можно сказать, что параметр $# выдает номер последнего позиционного параметра. Одно из основных применений этого параметра - проверка наличия нужного числа аргументов.
- Передает флаги в оболочку при ее запуске или при выполнении команды set.
? Выдает код завершения последней выполненной команды. Это десятичная строка. Большинство команд возвращают нулевое значение (код успешного завершения). Сама оболочка возвращает текущее значение переменной $? в качестве кода завершения.
$ Равен номеру процесса текущей оболочки. Поскольку в каждый момент времени номера всех активных процессов различны, они часто применяются в качестве уникальных имен для временных файлов.

Ниже приведен пример создания такого временного файла:

temp=$HOME/temp/$$
ls >$temp
.
.
.
rm $temp
! Указывает номер процесса последней команды, запущенной в фоновом режиме.
ноль (0) Передает имя оболочки или сценария оболочки.

Переменные, определяемые оболочкой Korn (POSIX)

Следующие переменные автоматически определяются оболочкой:

underscore (_) Первоначально равна абсолютному пути к выполняемому файлу оболочки или сценария. Затем этой переменной присваивается значение последнего аргумента предыдущей команды. Этот параметр не определен для команд, выполняемых в асинхронном режиме. Кроме того, параметру - присваивается имя файла MAIL при проверке наличия новой почты.
ERRNO Содержит код ошибки, выданный последней подпрограммой, завершившейся с ошибкой. Это значение зависит от конкретной системы и предназначено только для отладки.
LINENO Содержит номер текущей строки в выполняемом сценарии или функции.
OLDPWD Содержит имя предыдущего рабочего каталога, установленное с помощью команды cd.
OPTARG Содержит значение последнего аргумента опции, обработанного обычной встроенной командой getopts.
OPTIND Содержит номер последнего аргумента опции, обработанного обычной встроенной командой getopts.
PPID Содержит номер родительского процесса оболочки.
PWD Содержит имя текущего рабочего каталога, установленного с помощью команды cd.
RANDOM Содержит случайное целое число, равномерно распределенное в интервале от 0 до 32767. Последовательность псевдослучайных чисел можно инициализировать, присвоив произвольное число переменной RANDOM.
REPLY Значение этой переменной присваивается оператором select, а также обычной встроенной командой read, если она вызвана без аргументов.
SECONDS Содержит число секунд, прошедшее с момента запуска оболочки. Если этой переменной будет присвоено какое-либо число, то в результате она будет содержать сумму числа секунд, прошедшего с момента запуска оболочки, и присвоенного ей числа.

Переменные, применяемые оболочкой Korn (POSIX)

Оболочка Korn применяет при работе следующие переменные:

CDPATH Задает список каталогов, в которых выполняется поиск нужного каталога при выполнении команды cd.
COLUMNS Задает ширину окна редактирования в режиме редактирования и при выдаче списков оператора select.
EDITOR Если значение этого параметра заканчивается на символы emacs, gmacs или vi, и в данном сеансе оболочки переменная VISUAL не была определена с помощью особой встроенной команды set, то оболочка включает соответствующий встроенный редактор для командной строки.
ENV Если эта переменная определена, то при запуске оболочка пытается выполнить указанный файл. Данный файл выполняется после файла $HOME/.profile и, как правило, применяется для определения функций и псевдонимов.
FCEDIT Задает имя редактора по умолчанию для встроенной команды fc.
FPATH Задает список каталогов для поиска определений функций. В случае, если какая-либо функция будет вызвана с флагом -u, и не будет найдена соответствующая команда, оболочка попытается найти определение функции в этих каталогах. Если будет найден выполняемый файл, он будет прочитан и выполнен в текущей среде.
HISTFILE Если эта переменная определена на момент запуска оболочки, она задает имя файла хронологии выполненных команд.
HISTSIZE Если эта переменная определена на момент запуска оболочки, она задает число команд, сохраняемых в файле хронологии. Значение по умолчанию - 128.
HOME Содержит имя каталога, который становится текущим после входа в систему. Эта переменная инициализируется программой login. Значение переменной $HOME используется командой cd, если она указана без аргументов. Применение этой переменной вместо абсолютных имен позволяет каждому пользователю без изменений выполнять процедуру в своей среде из различных каталогов.
IFS Задает внутренние разделители полей (обычно содержит пробел, символ табуляции и символ новой строки). Эти символы применяются для разделения слов, получаемых в результате подстановки параметров или команд, и для разделения слов при выполнении обычной встроенной команды read. Первый символ параметра IFS вставляется между именами, полученными в результате подстановки параметра $*.
LANG Содержит значение по умолчанию для переменных LC_*.
LC_ALL Переопределяет значение переменной LANG и переменных LC_*.
LC_COLLATE Задает режим проверки принадлежности значений диапазону при подстановке шаблонов.
LC_CTYPE Задает классификацию символов, соответствие между строчными и прописными буквами и прочие атрибуты символов.
LC_MESSAGES Задает язык, на котором выдаются сообщения.
LINES Задает высоту колонок при печати списков оператора select. Высота списков оператора select (в строках) составляет около двух третей значения LINES.
MAIL Задает имя файла, применяемого для проверки наличия новой почты. Если этой переменной будет присвоено имя файла почты, а переменная MAILPATH не будет определена, то оболочка будет проверять наличие новой почты в указанном файле.
MAILCHECK Задает интервал (в секундах), через который оболочка будет проверять, изменились ли файлы, имена которых присвоены переменным MAILPATH и MAIL. Значение по умолчанию - 600 секунд. По истечении указанного времени с момента последней проверки оболочка вновь проверяет файлы почты перед тем, как выдать приглашение.
MAILPATH Задает список имен файлов, разделенных двоеточиями. Если эта переменная определена, оболочка информирует пользователя о любых изменениях в указанных файлах. Файлы проверяются с интервалом, заданным переменной MAILCHECK. За каждым именем файла может быть указан символ ? и сообщение для печати. Для данного сообщения будет выполнена подстановка переменных, и на момент подстановки имя измененного файла будет присвоено переменной $_. По умолчанию выдается сообщение Вам пришла новая почта в $_.
NLSPATH Задает расположение каталогов с сообщениями. Эта переменная применяется вместе с переменной LC_MESSAGES.
PATH Содержит список каталогов, в которых выполняется поиск команд. Каталоги должны быть разделены двоеточиями. При поиске команд каталоги просматриваются в указанном порядке. Пустая строка (два двоеточия подряд, начальное или конечное двоеточие) в этом списке соответствует текущему каталогу.
PS1 Задает основное приглашение системы. Это приглашение применяется в качестве основного приглашения оболочки, значение по умолчанию - $. Восклицательный знак (!) в основном приглашении оболочки заменяется на номер текущей команды.
PS2 Задает вспомогательное приглашение системы, по умолчанию - символ >.
PS3 Задает приглашение выбора, применяемое в цикле select. Значение по умолчанию - #? .
PS4 Значение этой переменной после подстановки параметров добавляется в начало каждой строки трассировочной информации. Если она не определена, по умолчанию в качестве приглашения трассировки используется символ +.
SHELL Задает путь к программе оболочки.
TMOUT Задает максимальное время (в секундах), в течение которого оболочка может бездействовать. Если переменной TMOUT присвоено значение, большее нуля, то оболочка автоматически завершает работу в случае, если в течение указанного времени в ответ на приглашение PS1 не будет введена ни одна команда. (Учтите, что оболочка может быть скомпилирована с жестким ограничением, которое нельзя превысить путем увеличения этого значения.)

Примечание: По истечении указанного времени оболочка дополнительно ожидает ввода команды в течение 60 секунд.
VISUAL Если значение этой переменной заканчивается на символы emacs, gmacs или vi, то включается соответствующая опция редактирования.

При запуске оболочка присваивает значения по умолчанию переменным PATH, PS1, PS2, MAILCHECK, TMOUT и IFS, но не присваивает значения переменным HOME, SHELL, ENV и MAIL (хотя команда login присваивает значение переменной HOME).


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