Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы OC UNIX_часть3.doc
Скачиваний:
21
Добавлен:
18.04.2015
Размер:
543.23 Кб
Скачать

3.3. Позиционные переменные

Позиционные переменные имеют вид – $n, гдеn– целое число. Позиционными они называются потому, что их номера соответствуют позициям аргументов. Интерпретаторshellавтоматически присваивает значения следующим своим переменным:

$n– параметр в n–ой позиции;

$0– имя вызываемой команды;

$1– имя первого аргумента;

$2– имя второго аргумента;

$9– имя девятого аргумента.

Для доступа более чем к 9 аргументам применяется специальная команда shift.

$?– код завершения последней выполненной команды;

$$– идентификационный номер процессаshell;

$!– идентификационный номер последнего запущенного интерпретаторомshellфонового процесса;

$#– число параметров (аргументов), переданных вshell, исключая$0(имя команды);

$*– содержит все разделенные пробелами позиционные параметры командной строки, начиная с$1. Здесь нет ограничения в 9 аргументов;

$–– показывает флаги, переданные вshellпри его запуске или установленные командойset.

Эти переменные равнозначны переменным, создаваемым пользователем, но они могут быть установлены только интерпретатором shell.

Пример использования позиционных параметров и команды сдвига:

$ ls /etc /dev /usr /udd (Отработка команды)

$ echo $0 (Имя команды)

ls

$ echo $# (число аргументов)

4

$ echo $* (список исходных аргументов)

/etc /dev /usr /udd

$ shift (сдвиг аргументов)

$ echo $* (список аргументов после сдвига)

/dev /usr /udd

Дополнительное использование команды setзаключается в том, что она часто используется в командных процедурах для присвоения значений позиционным параметрам.

Например,

$ set alpha beta gamma

$ echo $1 $2 $3

alpha beta gamma

$ echo $#

3

$ echo $*

alpha beta gamma

Например,

$ cat number

echo Number of arguments is $#

echo They are: $*

$ number one two three

Number of arguments is 3

They are: one two three

3.4. Код завершения процесса

Завершение выполнения любой программы в ОС UNIX сопровождается выработкой некоторого значения кода завершения, который возвращается родительскому процессу. По коду завершения вызывающий процесс определяет, как завершилось выполнение команды – успешно или нет. Команды UNIX возвращают код0при положительном исходе и код, отличный от0(1,2и т.д.), если что-то было выполнено неправильно.

По принятому соглашению число, равное нулю, обозначается true(успешное выполнение), а число, отличное от нуля, обозначаетсяfalse(неуспешное завершение).Falseможет иметь несколько значений, и конкретное значение часто указывает причину, по которой процесс завершился неуспешно. Некоторые команды, например,grepиdiff, для каждой ошибки выдают особый ненулевой код (конкретные значения приведены в документации).

Для установления требуемого кода завершения интерпретатор shellимеет две специальные программы –trueиfalse, единственная функция которых состоит в формировании значений кодаtrue– нуля иfalse– единицы.

Интерпретатор помещает код завершения предыдущей команды в переменную ?. Ее значение можно получить, поставив перед именем знак доллара, как и в случае любой другой переменной.

Например, чтобы получить код завершения командtrue иfalse, можно использовать присвоение переменнымAиBкода их завершения:

$ true;A=$?

$ false;B=$?

$ echo $A $B

0 1

Как правило, код завершения не нужно выводить на экран. Существует несколько способов использования кода завершения одной команды, как условие выполнения следующей, которые будут рассмотрены в следующих главах.