25.4. Окно ввода текста
Следующим по частоте применения после информационных виджитов и виджита yes-no следует виджит ввода текстовой информации — Inputbox. Принцип работы данного виджита следующий:
♦ Мы определяем имя временного файла, в который будет записано введенное пользователем сообщение.
♦ Вызываем программу dialog
с параметром --inputbox
.
♦ Перенаправляем вывод программы во временный файл (программа выведет введенное пользователем значение).
♦ Выводим или обрабатываем каким-либо другим способом содержимое временного файла.
Листинг 25.4. Виджит Inputbox
#!/bin/sh
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap 'rm -f $tempfile' 0 1 2 5 15
$DIALOG --title 'INPUT BOX' --clear
--inputbox 'Данный виджит используется для ввода
информации
Введите свое имя:' 16 51 2 > $tempfile
retval=$?
case $retval in
0)
echo 'Вы ввели `cat $tempfile`';;
1)
echo 'Нажата Cancel';;
255)
if test -s $tempfile ; then
cat $tempfile
else
echo 'Нажата ESC.'
fi
;;
esac

Рис. 25.3. Виджит InputBox
Значения, возвращаемые программой dialog
:
♦ 0, если пользователь что-то ввел и нажал Enter или просто нажал <Ввод>, не введя ничего (тогда временный файл будет пуст);
♦ 1, если пользователь нажал Cancel;
♦ 255, если пользователь нажал Esc.
25.5. Зависимые и независимые переключатели
Программа dialog
позволяет вам использовать в своих сценариях зависимые и независимые переключатели. Зависимые переключатели реализуются виджитом radiolist, а независимые — checklist.
Листинг 25.5. Независимые переключатели
#!/bin/sh
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap 'rm -f $tempfile' 0 1 2 5 15
$DIALOG --backtitle 'Пример'
--title 'Независимые переключатели'
--checklist 'Данный пример демонстрирует работу независимых
переключателей, реализуемых с помощью пакета Dialog
Используйте ПРОБЕЛ для включения или выключения переключателей.
Какие произведения вы читали?' 20 61 5
'Почти как люди' 'Саймак' off
'Фауст' 'Гете' ON
'Мастер и Маргарита' 'Булгаков' off
'Мир теней' 'Саймак' off
'Демон' 'Лермонтов' on 2> $tempfile
retval=$?
choice=`cat $tempfile`
case $retval in
0)
echo 'Вы выбрали '$choice'';;
1)
echo 'Нажата Cancel';;
255)
echo 'Нажата ESC';;
esac

Рис. 25.4. Независимые переключатели
Выбранные пользователем значения помещаются во временный файл, который вам нужно будет обработать. Сейчас мы просто выведем его на консоль. Элемент списка checklist может находиться в одном из положений — On или Off. Эти значения не чувствительны к регистру. Во временный файл выводятся только включенные переключатели.
Работа с виджитом radiolist осуществляется так же, как и в виджитом checklist, за исключением того, что может быть активным лишь один элемент и во временный файл будет записан именно этот элемент.
Листинг 25.6. Зависимые переключатели
#!/bin/sh
DIALOG=${DIALOG=dialog}
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap 'rm -f $tempfile' 0 1 2 5 15