где -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 "
$ SURNAME=Willis
$ echo ${FIRST}${SURNAME}
Bruce Willis
14.2.5. Проверка на наличие значения переменной (подстановка)
Допустим, что нужно проверить, была ли установлена либо инициализирована переменная. Если это не так, можно тут же воспользоваться другим значением. Формат используемой в этом случае команды будет следующий:
${переменная: — значение}
Если переменная установлена, она применяется. Если переменная не установлена, вместо нее используется значение, например:
$ COLOUR=blue
$ echo "The sky is ${COLOUR:=grey} today"
The sky is blue today
Переменная colour имеет значение blue. Когда команда echo выводит на экран значение переменной colour, выполняется проверка, была ли установлена переменная ранее. Если переменная установлена, используется это значение. Выполним сброс значения переменной и рассмотрим результат.
$ COLOUR=blue
$ unset COLOUR
$ echo "The sky is ${COLOUR:=grey} today"
The sky is grey today
В приведенном примере переменной не присваивается действительное значение; для присваивания значения следует применить формат:
${переменная:=значение}
Рассмотрим более полезный пример, в котором содержится запрос о времени создания платежной ведомости (payroll), а также относительно ее типа. Если в обоих случаях при указании времени и типа нажать клавишу [Enter], то значения этих переменных не будут установлены пользователем. В этом случае применяются новые значения, заданные по умолчанию (03:00 и Weekly). Затем значения передаются команде at, что свидетельствует о переносе выполнения задания на более поздний срок.
$ pg vartest
#!/bin/sh
# vartest
echo "what time do you wish to start the payroll [03:00]:"
read TIME
echo " process to start at ${TIME:=03:00} OK"
echo "Is it a monthly or weekly run [Weekly]:"
read RUN_TYPE
echo "Run type ls ${RUN_TYPE:=Keekly}"
at -f $RUN_TYPE $TIME
Ниже при выводе данных выбирается клавиша [Enter] в обоих случаях.
$ vartest
what time do you wish to start the payroll [03:00]:
process to start at 03:00 OK ls it a monthly or weekly run [Weekly]:
Run type is Weekly
warning: commands will be executed using /bin/sh job 15 at 1999-05-14 03:00
Можно также проверить, установлено ли значение переменной, и затем выйти из системы, получив сообщение об ошибке. В следующем примере проверяется, установлен ли параметр для файла переменной длины.
$ echo "The file is ${FILES:?}"
sh: files: parameter null or not set
Приведенное выше сообщение не слишком информативно, но пользователь может задать свое собственное сообщение.
$ echo "The file is $(FILES:?} sorry cannot locate the variable files")"