dialog --title "Check me" --checklist "Pick Numbers" 15 25 3 1 "one" "off" 2 "two" "on" 3 "three" "off"
Полученный результат показан на рис. 2.4.
Как это работает
В этом примере параметр --checklist
указывает на то, что вы собираетесь создать диалоговое окно с флажками. Вы используете опцию --title
для задания заголовка " Check me
", следующий параметр — пояснительная надпись " Pick Numbers
".
Далее вы переходите к указанию размеров диалогового окна. Оно будет высотой 15 строк и шириной 25 символов и 3 строки отводятся для меню. Это не самый удачный выбор размеров, но он позволит вам увидеть, как размещаются элементы.
Опции выглядят несколько мудрено, но вам следует запомнить только то, что у каждого элемента списка есть три значения:
□ номер в списке;
□ текст;
□ состояние.
Рис. 2.4
У первого элемента номер 1, отображается текст "one" (один) и выбрано состояние "off" (сброшен). Далее вы переходите ко второму элементу с номером 2, текстом "two" и состоянием "on" (установлен). Так продолжается до тех пор, пока вы не опишите все элементы списка.
Легко, не правда ли? Теперь попробуйте ввести несколько вариантов в командной строке и убедитесь, насколько эту утилиту легко применять. Для того чтобы включить этот пример в программу, вы должны иметь доступ к результатам пользовательского ввода. Это совсем просто: перенаправьте стандартный поток ошибок в текстовый ввод или проверьте переменную окружения $?
, которая, как вы помните, не что иное, как код завершения предыдущей команды.
Упражнение 2.22. Более сложная программа, использующая утилиту dialog
Давайте рассмотрим простую программу questions, которая принимает к сведению пользовательские ответы.
1. Начните с простого диалогового окна, сообщающего пользователю о происходящем. Вам не нужно получать результат или какой бы то ни было ввод пользователя, поэтому все просто и ясно:
#!/bin/sh
# Задайте несколько вопросов и получите ответ
dialog --title "Questionnaire" --msgbox "Welcome to my simple survey" 9 18
2. Спросите пользователя с помощью простого диалогового окна с кнопками типа Yes/No,хочет ли он продолжать. Воспользуйтесь переменной окружения $?
для того, чтобы выяснить, выбрал пользователь ответ Yes(код завершения 0) или No.Если он не хочет двигаться дальше, используйте простое информационное окно, не требующее никакого пользовательского ввода для своего завершения.
dialog --title "Confirm" --yesno "Are you willing to take part?" 9 18
if [ $? != 0 ]; then
dialog --infobox "Thank you anyway" 5 20 sleep 2
dialog --clear exit 0
fi
3. Спросите у пользователя его имя с помощью диалогового окна ввода. Перенаправьте стандартный поток ошибок во временный файл _1.txt, который затем вы сможете обработать в переменной QNAME
.
dialog --title "Questionnaire" --inputbox "Please enter your name" 9 30 2>_1.txt
Q_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.txt
Q_MUSIC=$(cat _1.txt)
5. Номер, выбранный пользователем, будет запоминаться во временном файле _1.txt, который перехватывается переменной Q_MUSIC
, поэтому вы сможете проверить результат.
if [ "$Q_MUSIC" = "1" ]; then
dialog --title "Likes Classical" --msgbox "Good choice!" 12 25
else
dialog --title "Doesn't like Classical" --msgbox "Shame" 12 25
fi
В заключение очистите последнее диалоговое окно и завершите программу.
sleep 2
dialog --clear
exit 0
На рис. 2.5 показан результат.
Как это работает
В данном примере вы соединяете команду dialog
и простой программный код на языке командной оболочки для того, чтобы показать, как можно создавать простые программы с графическим пользовательским интерфейсом, используя только сценарий командной оболочки. Вы начинаете с обычного экрана-приветствия, а затем с помощью простого диалогового окна с кнопками типа Yes/Noспрашиваете пользователя о его желании участвовать в опросе. Вы используете переменную $?
для проверки ответа пользователя. Если он согласен, вы запрашиваете его имя, сохраняете его в переменной Q_NAME
и выясняете с помощью диалогового окна-меню, какой музыкальный стиль он любит. Сохранив числовой вывод в переменной Q_MUSIC
, вы сможете увидеть, что ответил пользователь, и отреагировать соответственно.
Читать дальше