Таблица 2.21
| Тип диалогового окна | Параметры |
|---|---|
--checklist | text height width list-height [tag text status] ... |
--infobox | text height width |
--inputbox | text height width [initial string] |
--menu | text height width menu-height [tag item ] ... |
--msgbox | text height width |
--radiolist | text height width list-height [tag text status] ... |
--textbox | filename height width |
--yesno | text height width |
Помимо параметров диалоговые окна всех типов принимают ряд опций. Мы не будем перечислять все, а упомянем лишь две из них:
--title-clearВыполните упражнения 2.21 и 2.22.
dialogДавайте сразу перейдем к красивому сложному примеру. Если вы поймете его, все остальные покажутся легкими! В этом примере вы создадите диалоговое окно со списком флажков, с заголовком Check me (Поставь галочку) и пояснительной надписью Pick Numbers (Выбери номера). Окно с флажками будет высотой 15 строк и шириной 25 символов, и каждый флажок будет занимать 3 символа по высоте. И последнее, но не по степени важности, вы перечислите отображаемые элементы вместе с принятой по умолчанию установкой или сбросом (on/off) флажка.
dialog --title "Check me" --checklist "Pick Numbers" 15 25 3 1 "one" "off" 2 "two" "on" 3 "three" "off"Полученный результат показан на рис. 2.4.
Как это работает
В этом примере параметр
--checklist--titleCheck mePick NumbersДалее вы переходите к указанию размеров диалогового окна. Оно будет высотой 15 строк и шириной 25 символов и 3 строки отводятся для меню. Это не самый удачный выбор размеров, но он позволит вам увидеть, как размещаются элементы.
Опции выглядят несколько мудрено, но вам следует запомнить только то, что у каждого элемента списка есть три значения:
□ номер в списке;
□ текст;
□ состояние.

Рис. 2.4
У первого элемента номер 1, отображается текст "one" (один) и выбрано состояние "off" (сброшен). Далее вы переходите ко второму элементу с номером 2, текстом "two" и состоянием "on" (установлен). Так продолжается до тех пор, пока вы не опишите все элементы списка.
Легко, не правда ли? Теперь попробуйте ввести несколько вариантов в командной строке и убедитесь, насколько эту утилиту легко применять. Для того чтобы включить этот пример в программу, вы должны иметь доступ к результатам пользовательского ввода. Это совсем просто: перенаправьте стандартный поток ошибок в текстовый ввод или проверьте переменную окружения
$?dialogДавайте рассмотрим простую программу questions, которая принимает к сведению пользовательские ответы.
1. Начните с простого диалогового окна, сообщающего пользователю о происходящем. Вам не нужно получать результат или какой бы то ни было ввод пользователя, поэтому все просто и ясно:
#!/bin/sh# Задайте несколько вопросов и получите ответdialog --title "Questionnaire" --msgbox "Welcome to my simple survey" 9 182. Спросите пользователя с помощью простого диалогового окна с кнопками типа Yes/No, хочет ли он продолжать. Воспользуйтесь переменной окружения
$?dialog --title "Confirm" --yesno "Are you willing to take part?" 9 18if [ $? != 0 ]; then dialog --infobox "Thank you anyway" 5 20 sleep 2 dialog --clear exit 0fi3. Спросите у пользователя его имя с помощью диалогового окна ввода. Перенаправьте стандартный поток ошибок во временный файл _1.txt, который затем вы сможете обработать в переменной
QNAMEdialog --title "Questionnaire" --inputbox "Please enter your name" 9 30 2>_1.txtQ_NAME=$(cat _1.txt)4. Здесь у вас появляется меню из четырех пунктов. И снова вы перенаправляете стандартный поток ошибок и загружаете его в переменную.
dialog --menu "$Q_NAME, what music do you like best?" 15 30 4 1 "Classical" 2 "Jazz" 3 "Country" 4 "Other" 2>_1.txtQ_MUSIC=$(cat _1.txt)5. Номер, выбранный пользователем, будет запоминаться во временном файле _1.txt, который перехватывается переменной
Q_MUSICif [ "$Q_MUSIC" = "1" ]; then dialog --title "Likes Classical" --msgbox "Good choice!" 12 25else dialog --title "Doesn't like Classical" --msgbox "Shame" 12 25