Допустим, что нужно проверить, была ли установлена либо инициализирована переменная. Если это не так, можно тут же воспользоваться другим значением. Формат используемой в этом случае команды будет следующий:
${переменная: — значение}
Если переменная установлена, она применяется. Если переменная не установлена, вместо нее используется значение, например:
$ 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")"
sh: files: sorry cannot locate the variable files
Чтобы проверить, содержит ли переменная значение (а если не содержит, возвратить пустую строку), примените следующую команду:
${переменная:+значение)
Для инициализации переменной значением пустой строки примените команду:
variable=""
$ DESTINATION=""
Переменные можно также использовать для хранения информации, применяемой впоследствии для замены аргументов в командах системы. В следующем примере переменные сохраняют информацию об имени файла, которая необходима для копирования файла. С помощью переменной SOURCE можно узнать путь к файлу passwd, а с помощью переменной DEST — получателя этого файла. Обе эти переменные применяются в команде ср.
$ SOURCE="/etc/passwd"
$ DEST="/tmp/passwd.bak"
$ cp ${SOURCE} ${DEST}
В примере ниже с помощью переменной device получаем путь к накопителю на магнитной ленте. Эти сведения используются затем в команде mt при перемотке ленты.
$ DEVICE="/dev/rmt/0n"
$ mt -f ${DEVICE} rewind