Чтение онлайн

ЖАНРЫ

Linux и UNIX: программирование в shell. Руководство разработчика
Шрифт:

Переменные среды и интерпретатора shell

Чтобы продуктивно работать с интерпретатором shell, нужно уметь управлять переменными этого интерпретатора. Переменными интерпретатора shell являются наименования, которым присваиваются значения. В качестве значений может выступать имя пути, имя файла или число. В любом случае интерпретатор shell воспринимает присвоенное значение как текстовую строку.

Существуют переменные двух типов — переменные интерпретатора (shell) и переменные среды. На самом деле имеется четыре типа переменных, но оставшиеся предназначены

только для чтения. Эти переменные считаются специальными и применяются при передаче параметров в shell–сценарии.

В этой главе рассматриваются следующие темы:

• переменные интерпретатора shell;

• переменные среды;

• подстановка переменных;

• экспорт переменных;

• специальные переменные;

• передача информации в сценарии;

• применение позиционных параметров в системных командах.

14.1. Понятие о переменных интерпретатора shell

Переменные позволяют выполнить настройку среды. Они содержат информацию, которая применяется определенным пользователем. Благодаря этому система получает более подробные сведения о пользователях. Кроме того, переменные используются для хранения констант. Рассмотрим, например, переменную под именем editor. Существует довольно много текстовых редакторов, но как выбрать наиболее подходящий из них? Присвойте имя нужного редактора переменной editor, и тогда именно этот редактор будет применяться, когда используется программа cron или другие приложения. Система обращается к значению переменной editor и применяет указанный редактор как заданный по умолчанию.

Для регистрации в системе sybase следует ввести команду:

$ isql -Udavet -Pabcd -Smethsys

где -S — имя сервера, с которым установлена связь. Переменная, содержащая имя сервера, называется dsquery. Имя сервера присваивается переменной dsquery. При регистрации в системе в случае, если имя сервера не указывается вместе с " — S", приложение обращается к переменной dsquery и использует значение этой переменной в качестве имени сервера. Для регистрации нужно ввести

$ isql -Odawet -Pabcd

Так функционирует большинство приложений.

14.2. Локальные переменные

Переменные интерпретатора shell могут использоваться сценариями в период функционирования интерпретатора shell. После завершения выполнения интерпретатора действие этих переменных прекращается. Например, локальная переменная имя_файла может иметь значение hops.doc. Это значение важно для пользователя только во время выполнения текущего интерпретатора команд; если запускается на выполнение другой процесс или происходит выход из среды интерпретатора команд, текущее значение локальной переменной не сохраняется. Переменные этого типа недоступны для других интерпретаторов shell или процессов, что имеет свои преимущества.

В табл. 14.1 представлены различные способы присваивания значений переменным.

Некоторые пользователи предпочитают заключать переменные интерпретатора команд в фигурные скобки. Это предупреждает ошибочную интерпретацию значений переменных.. Делать это не обязательно, но такой прием удобен в работе.

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

$ имя_переменной=значение или ${иня_перемениой=значение}

Обратите внимание, что с обеих сторон знака — имеются пробелы. Если значение содержит пробел, заключите все в двойные кавычки. Для переменных

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

Таблица 14,1. Различные способы присваивания значений переменным

Имя переменной = значение

Значение переменной присваивается переменной имя_переменной

Имя переменной + значение

Значение переменной присваивается переменной

имя переменной, если оно установлено

Имя_переменной:?значение

На экран выводится сообщение об ошибке, если не установлена переменная имя_переменной

Имя переменной? значение

На экран выводится сообщение о системной ошибке, если не установлена переменная имя_переменной

Имя_переменной:=значение

Значение переменной присваивается переменной имя_переменной, если она не установлена

Имя переменной: — значение

Как и выше, но значение переменной имя_переменной не присваивается; оно может быть получено подстановкой

14.2.1. Отображение значения переменной

Чтобы отобразить значение отдельной переменной, достаточно применить команду echo и предварить имя переменной знаком $. Рассмотрим несколько примеров.

$ GREAT_PICTURE="die hard"

$ echo ${GREAT_PICTURE}

die hard

$ DOLLAR=99

$ echo $(DOLLAR)

99

$ LAST_FILE=ZLPSO.txt

$ echo ${LAST_FILE}

ZLPSO.txt

Переменные можно также комбинировать. Ниже переменной error_msg присваивается сообщение об ошибке, в котором используется значение переменной среды LOGNAME.

$ ERROR_MSG="Sorry this file does not exist user $LOGNAME"

$ echo ${ERROR_MSG}

Sorry this file does not exist user dave

В приведенном выше примере интерпретатор shell сначала выводит текст, затем рассматривает переменную $LOGNAME и отображает ее значение.

14.2.2. Удаление значения переменной

Чтобы удалить значение переменной, достаточно применить команду unset: unset имя_переменной

$ PC=enterprise

$ echo ${РС}

enterprise

$ unset PC

$ echo ${PC)

$

14.2.3. Отображение значений всех переменных интерпретатора shell

Чтобы просмотреть значения всех переменных интерпретатора shell, достаточно воспользоваться командой set.

$ set

PWD=/root

SHELL=/bin/sh

SHLVL=1

TERM=vt100

UID=7

USER=dave

dollar=99

great_picture=die hard

last_file=ZLPSO.txt

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

14.2.4. Объединение значений переменных

Чтобы объединить значения переменных, достаточно последовательно расположить переменные:

echo ${имя_переменной}${имя_переменной}. . ,

$ FIRST="Bruce "

Поделиться с друзьями: