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

ЖАНРЫ

Искусство программирования на языке сценариев командной оболочки

Купер Мендель

Шрифт:

${parameter=default}, ${parameter:=default}

Если значения параметров не задананы явно, то они принимают значения по-умолчанию.

Оба метода задания значений по-умолчанию до определенной степени идентичны. Символ : имеет значение только когда $parameter был инициализирован "пустым" (null) значением [ 22 ] , как показано выше.

echo ${username=`whoami`}

# Переменная "username" принимает значение, возвращаемое командой `whoami`.

22

Если $parameter "пустой",в неинтерактивных сценариях, то это будет приводить к завершению с кодом возврата 127 ("command not found").

${parameter+alt_value}, ${parameter:+alt_value}

Если параметр имеет какое либо значение, то используется alt_value, иначе -- null ("пустая" строка).

Оба варианта до определенной степени идентичны. Символ : имеет значение только если parameter объявлен и "пустой", см. ниже.

echo "###### \${parameter+alt_value} ########"

echo

a=${param1+xyz}

echo "a = $a" # a =

param2=

a=${param2+xyz}

echo "a = $a" # a = xyz

param3=123

a=${param3+xyz}

echo "a = $a" # a = xyz

echo

echo "###### \${parameter:+alt_value} ########"

echo

a=${param4:+xyz}

echo "a = $a" # a =

param5=

a=${param5:+xyz}

echo "a = $a" # a =

# Вывод отличается от a=${param5+xyz}

param6=123

a=${param6+xyz}

echo "a = $a" # a = xyz

${parameter?err_msg}, ${parameter:?err_msg}

Если parameter инициализирован, то используется его значение, в противном случае -- выводится err_msg.

Обе формы записи можно, до определенной степени, считать идентичными. Символ : имеет значение только когда parameter инициализирован "пустым" значением, см. ниже.

Пример 9-13. Подстановка параметров и сообщения об ошибках

#!/bin/bash

# Проверка отдельных переменных окружения.

# Если переменная, к примеру $USER, не установлена,

#+ то выводится сообщение об ошибке.

: ${HOSTNAME?} ${USER?} ${HOME?} ${MAIL?}

echo

echo "Имя

машины: $HOSTNAME."

echo "Ваше имя: $USER."

echo "Ваш домашний каталог: $HOME."

echo "Ваш почтовый ящик: $MAIL."

echo

echo "Если перед Вами появилось это сообщение,"

echo "то это значит, что все критические переменные окружения установлены."

echo

echo

# ------------------------------------------------------

# Конструкция ${variablename?} так же выполняет проверку

#+ наличия переменной в сценарии.

ThisVariable=Value-of-ThisVariable

# Обратите внимание, в строковые переменные могут быть записаны

#+ символы, которые запрещено использовать в именах переменных.

: ${ThisVariable?}

echo "Value of ThisVariable is $ThisVariable".

echo

echo

: ${ZZXy23AB?"Переменная ZZXy23AB не инициализирована."}

# Если ZZXy23AB не инициализирована,

#+ то сценарий завершается с сообщением об ошибке.

# Текст сообщения об ошибке можно задать свой.

# : ${ZZXy23AB?"Переменная ZZXy23AB не инициализирована."}

# То же самое: dummy_variable=${ZZXy23AB?}

# dummy_variable=${ZZXy23AB?"Переменная ZXy23AB не инициализирована."}

#

# echo ${ZZXy23AB?} >/dev/null

echo "Это сообщение не будет напечатано, поскольку сценарий завершится раньше."

HERE=0

exit $HERE # Сценарий завершит работу не здесь.

Пример 9-14. Подстановка параметров и сообщение о "порядке использования"

#!/bin/bash

# usage-message.sh

: ${1?"Порядок использования: $0 ARGUMENT"}

# Сценарий завершит свою работу здесь, если входные аргументы отсутствуют,

#+ со следующим сообщением.

# usage-message.sh: 1: Порядок использования: usage-message.sh ARGUMENT

echo "Эти две строки появятся, только когда задан аргумент в командной строке."

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