(в данном примере - 10 секунд). \
У вас $left $unit чтобы прочитать это сообщение..." 10 52
left=`expr $left — 1`
test $left = 1 && unit="second"
done
Параметр --sleep 1
означает, что программа dialog
будет перерисовывать окно через одну секунду. Параметр --title
задает заголовок виджита, --infobox
— определяет тип виджита, после определения виджита следует отображаемое сообщение, а потом — размер виджита.
В цикле while мы проверяем, сколько секунд осталось, уменьшая значение переменной left.
25.3. Виджит Yes-no
Часто встречаются диалоговые окна, спрашивающие пользователя, согласен ли он с действиями программы, например, «Вы точно хотите выйти?» или «Удалить этот файл?». Пользователю же предлагается два варианта ответа — Да или Нет. Для организации такого диалога предназначен виджит yes-no.
Следующий листинг демонстрирует работу с этим виджитом:
Листинг 25.3. Работа с виджитом yes-no
#!/bin/sh
DIALOG=${DIALOG=dialog}
$DIALOG --title "YES/NO BOX" --clear \
--yesno "Отформатировать /dev/hda1?" 5 41
case $? in
0)
echo "Да.";;
1)
echo "Нет.";;
255)
echo "ESC.";;
esac
Рис. 25.2. Виджит yes-no
Виджит используется так же, как и предыдущие: название виджита (yesno), текстовое сообщение, размеры виджита. Программа dialog возвращает следующие значения:
♦ 0, если пользователь нажал кнопку Yes;
♦ 1, если пользователь нажал кнопку No;
♦ 255, если пользователь нажал клавишу Esc.
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 "Данный виджит используется для ввода \
информации \n\n \
Введите свое имя:" 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 "Данный пример демонстрирует работу независимых \n\
переключателей, реализуемых с помощью пакета Dialog \n\
Используйте ПРОБЕЛ для включения или выключения переключателей.\
\n\n\
Какие произведения вы читали?" 20 61 5 \
"Почти как люди" "Саймак" off \
"Фауст" "Гете" ON \
"Мастер и Маргарита" "Булгаков" off \
"Мир теней" "Саймак" off \
"Демон" "Лермонтов" on 2> $tempfile
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии