сообщений. Ждет, пока пользователь нажмет Enter" 10 41
case $? in
0)
echo "OK";;
255)
echo "Нажата ESC.";;
esac
Теперь разберемся, что есть что. Параметр --title
программы dialog задает заголовок виджита (рис. 25.1) Параметр --msgbox сообщает программе тип виджита, который нужно отобразить. После этого параметра нужно указать текст сообщения, заключенный в кавычки. В тексте можно использовать управляющие последовательности (\b, \n, \t,\ a и др.). После сообщения задаются размеры виджита.
Рис. 25.1. Виджит Msgbox
Конструкция case проверяет возвращенное программой dialog значение. Если пользователь нажал OK (или <Ввод>), то программа возвращает 0, а если клавишу Esc, то 255.
Виджит Infobox следует использовать так:
Листинг 25.2. Использование виджита Infobox
#! /bin/sh
DIALOG=${DIALOG=dialog}
# ждем указанное количество секунд
left=10
unit="секунд"
while test $left != 0
do
$DIALOG --sleep 1 \
--title "INFO BOX" \
--infobox "Это информационный бокс. Он отличается от \
msgbox тем, что не ждёт, пока пользователь нажмет Enter, \
а прекращает работу по истечении времени \
(в данном примере - 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
.
♦ Перенаправляем вывод программы во временный файл (программа выведет введенное пользователем значение).
♦ Выводим или обрабатываем каким-либо другим способом содержимое временного файла.