Искусство программирования на языке сценариев командной оболочки
Шрифт:
echo $Msg; echo $Msg
exit 0
Одно из полезных применений команды printf– - форматированный вывод сообщений об ошибках
E_BADDIR=65
var=nonexistent_directory
error
{
printf "$@" >&2
#
echo
exit $E_BADDIR
}
cd $var || error $"Невозможно перейти в каталог %s." "$var"
# Спасибо S.C.
read
"Читает" значение переменной с устройства стандартного ввода -- stdin, в интерактивном режиме это означает клавиатуру. Ключ – a позволяет записывать значения в массивы (см. Пример 25-3).
Пример 11-2. Ввод значений переменных с помощью read
#!/bin/bash
echo -n "дите значение переменной 'var1': "
# Ключ -n подавляет вывод символа перевода строки.
read var1
# Обратите внимание -- перед именем переменной отсутствует символ '$'.
echo "var1 = $var1"
echo
# Одной командой 'read' можно вводить несколько переменных.
echo -n "дите значения для переменных 'var2' и 'var3' (через пробел или табуляцию): "
read var2 var3
echo "var2 = $var2 var3 = $var3"
# Если было введено значение только одной переменной, то вторая останется "пустой".
exit 0
Если команде read не была передано ни одной переменной, то ввод будет осуществлен в переменную $REPLY.
Пример 11-3. Пример использования команды read без указания переменной для ввода
#!/bin/bash
echo
# -------------------------- #
# Первый блок кода.
echo -n "Введите значение: "
read var
echo "\"var\" = "$var""
# Здесь нет ничего
# -------------------------- #
echo
echo -n "Введите другое значение: "
read # Команда 'read' употребляется без указания переменной для ввода,
#+ тем не менее...
#+ По-умолчанию ввод осуществляется в переменную $REPLY.
var="$REPLY"
echo "\"var\" = "$var""
# Эта часть сценария эквивалентна первому блоку, выделенному выше.
echo
exit 0
Обычно, при вводе в окне терминала с помощью команды "read", символ \ служит для экранирования символа перевода строки. Ключ – r заставляет интерпретировать символ \ как обычный символ.
Пример 11-4. Ввод многострочного текста с помощью read
#!/bin/bash
echo
echo "Введите строку, завершающуюся символом \\, и нажмите ENTER."
echo "Затем введите вторую строку, и снова нажмите ENTER."
read var1 # При чтении, символ "\" экранирует перевод строки.
# первая строка \
# вторая строка
echo "var1 = $var1"
# var1 = первая строка вторая строка
# После ввода каждой строки, завершающейся символом "\",
# вы можете продолжать ввод на другой строке.
echo; echo
echo "Введите другую строку, завершающуюся символом \\, и нажмите ENTER."
read -r var2 # Ключ -r заставляет команду "read" воспринимать "\"
# как обычный символ.
# первая строка \
echo "var2 = $var2"
# var2 = первая строка \
# Ввод данных прекращается сразу же после первого нажатия на клавишу ENTER.
echo
exit 0