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

на главную - закладки

Жанры

Linux: Полное руководство

Аллен Питер В.

Шрифт:

#!/bin/sh

DIALOG=${DIALOG=dialog}

$DIALOG --title "MESSAGE BOX" --clear \

– -msgbox "Этот виджит используется для вывода \

сообщений. Ждет, пока пользователь нажмет 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
.

♦ Перенаправляем вывод программы во временный файл (программа выведет введенное пользователем значение).

♦ Выводим или обрабатываем каким-либо другим способом содержимое временного файла.

Листинг 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-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Солнечный флот

Вайс Александр
4. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Солнечный флот

Лихие. Авторитет

Вязовский Алексей
3. Бригадир
Фантастика:
альтернативная история
попаданцы
5.00
рейтинг книги
Лихие. Авторитет

Сокрушитель

Поселягин Владимир Геннадьевич
3. Уникум
Фантастика:
боевая фантастика
5.60
рейтинг книги
Сокрушитель

Я Гордый Часть 3

Машуков Тимур
3. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый Часть 3

Скажи миру – «нет!»

Верещагин Олег Николаевич
1. Путь домой
Фантастика:
фэнтези
героическая фантастика
попаданцы
7.61
рейтинг книги
Скажи миру – «нет!»

Воевода

Ланцов Михаил Алексеевич
5. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Воевода

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Казачий князь

Трофимов Ерофей
5. Шатун
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Казачий князь

An ordinary sex life

Астердис
Любовные романы:
современные любовные романы
love action
5.00
рейтинг книги
An ordinary sex life

Кодекс Охотника. Книга IX

Винокуров Юрий
9. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга IX

Старый, но крепкий 4

Крынов Макс
4. Культивация без насилия
Фантастика:
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 4

Кодекс Охотника. Книга XXVII

Винокуров Юрий
27. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXVII