14.2.5. Проверка на наличие значения переменной (подстановка)

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")"

sh: files: sorry cannot locate the variable files

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

${переменная:+значение)

Для инициализации переменной значением пустой строки примените команду:

variable=""

$ DESTINATION=""