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

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

Жанры

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

Шиленко Сергей
1. Валинор
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Искатель 1

Личный аптекарь императора. Том 6

Карелин Сергей Витальевич
6. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Личный аптекарь императора. Том 6

Ермак. Телохранитель

Валериев Игорь
2. Ермак
Фантастика:
альтернативная история
7.50
рейтинг книги
Ермак. Телохранитель

Атаман. Гексалогия

Корчевский Юрий Григорьевич
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
8.15
рейтинг книги
Атаман. Гексалогия

Миллионщик

Шимохин Дмитрий
3. Подкидыш
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Миллионщик

Мастер 11

Чащин Валерий
11. Мастер
Фантастика:
боевая фантастика
попаданцы
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Мастер 11

Искра

Видум Инди
2. Петя и Валерон
Фантастика:
рпг
аниме
попаданцы
5.00
рейтинг книги
Искра

Черный дембель. Часть 4

Федин Андрей Анатольевич
4. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 4

Вернувшийся: Посол. Том IV

Vector
4. Вернувшийся
Фантастика:
космическая фантастика
киберпанк
5.00
рейтинг книги
Вернувшийся: Посол. Том IV

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Точка Бифуркации

Смит Дейлор
1. ТБ
Фантастика:
боевая фантастика
7.33
рейтинг книги
Точка Бифуркации

Московское золото и нежная попа комсомолки. Часть Четвертая

Хренов Алексей
4. Летчик Леха
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Московское золото и нежная попа комсомолки. Часть Четвертая

Первый среди равных. Книга IV

Бор Жорж
4. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга IV

Система Возвышения. (цикл 1-8) - Николай Раздоров

Раздоров Николай
Система Возвышения
Фантастика:
боевая фантастика
4.65
рейтинг книги
Система Возвышения. (цикл 1-8) - Николай Раздоров