Dialog

Установка

apt-get install dialog

brew install dialog

yum install dialog

Описание

dialog это утилита для построения консольных интерфейсов. Dialog входит в состав большинства дистрибутивов GNU/Linux. Если вы хотите собрать её из исходников, то архив можно найти на http://hightek.org/dialog/.

Эта программа являются свободными и работают на большом количестве платформ *nix. Большинство приведённых примеров в данном руководстве являются адаптацией примеров, поставляемых с исходными кодами программ.

Да / Нет

Вот первый скрипт, работу которого я проверил. Он просто выводит диалог с кнопками "Да" и "Нет".

#!/bin/bash DIALOG=${DIALOG=dialog} $DIALOG --title " Мой первый диалог" --clear \ --yesno "Привет! Перед вами пример программы,\nиспользующей (X)dialog" 10 40 case $? in 0) echo "Выбрано 'Да'.";; 1) echo "Выбрано 'Нет'.";; 255) echo "Нажата клавиша ESC.";; esac

Применяемые опции:

–title задаёт заголовок диалога

–clear очищает экран перед отображением диалога

–yesno задаёт тип диалога и текст для отображения.

Ввод данных

Следующая программа ожидает ввода строку и затем отображает её на экране.

#!/bin/sh DIALOG=${DIALOG=dialog} tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$ trap "rm -f $tempfile" 0 1 2 5 15 $DIALOG --title "Ввод данных" --clear \ --inputbox "Привет! Перед вами пример ввода даных\nВведите своё имя:" 16 51 2> $tempfile retval=$? case $retval in 0) echo "Вы ввели `cat $tempfile`" ;; 1) echo "Отказ от ввода.";; 255) if test -s $tempfile ; then cat $tempfile else echo "Нажата клавиша ESC." fi ;; esac

Организация меню

Следующая программа позволяет вам организовать список с возможностью выбора одного из элементов:

#!/bin/sh DIALOG=${DIALOG=dialog} tempfile=`mktemp 2>/dev/null` || tempfile=/tmp/test$$ trap "rm -f $tempfile" 0 1 2 5 15 $DIALOG --clear --title "Мои любимые исполнители" \ --menu "Все любят песни хинди, поэтому выбирайте:" 20 51 4 \ "Rafi" "Mohammed Rafi" \ "Mukesh" "Mukesh" \ "Kishore" "Kishore Kumar" \ "Saigal" "K L Saigal" \ "Lata" "Lata Mangeshkar" \ "Yesudas" "K J Yesudas" 2> $tempfile retval=$? choice=`cat $tempfile` case $retval in 0) echo "Да вы эстет! '$choice' -- это лучшее, что вы слышали в своей жизни!";; 1) echo "Отказ от ввода.";; 255) echo "Нажата клавиша ESC.";; esac

Списки зависимых кнопок (radiolist) и флажков (checklist)

Формирование таких списков аналогично организации меню, описанного в предыдущем разделе.

#! /bin/sh DIALOG=${DIALOG=dialog} tempfile=`mktemp 2>/dev/null` || tempfile=/tmp/test$$ trap "rm -f $tempfile" 0 1 2 5 15 $DIALOG --backtitle "Не стесняйтесь, выберите любимого певца" \ --title "Выбор исполнителя" --clear \ --radiolist "Мой любимый певец, это... " 20 61 5 \ "Rafi" "Mohammed Rafi" off \ "Lata" "Lata Mangeshkar" ON \ "Hemant" "Hemant Kumar" off \ "Dey" "MannaDey" off \ "Kishore" "Kishore Kumar" off \ "Yesudas" "K. J. Yesudas" off 2> $tempfile retval=$? choice=`cat $tempfile` case $retval in 0) echo "Ого! Кто бы мог подумать, но выбор пал на '$choice'";; 1) echo "Отказ от ввода.";; 255) echo "Нажата клавиша ESC.";; esac

Для того, чтобы использовать список флажков, вместо радиокнопок, замените в скрипте опцию –radiolist на –checklist.

Создание индикатора (прогрессбар)

Такой элемент позволяет визуализировать процесс выполнения вашего скрипта:

#!/bin/sh DIALOG=${DIALOG=dialog} COUNT=10 ( while test $COUNT != 110 do echo $COUNT echo "XXX" echo "Новое сообщение ($COUNT процентов)" echo "Строка 2" echo "XXX" COUNT=`expr $COUNT + 10` sleep 1 done ) | $DIALOG --title "Индикатор" --gauge "А вот пример простейшего индикатора" 20 70 0

Выбор файла

Вот пример простейшего диалога для выбора файла:

#!/bin/sh DIALOG=${DIALOG=dialog} FILE=`$DIALOG --stdout --title "Выберите файл" --fselect $HOME/ 10 60` case $? in 0) echo "Выбран \"$FILE\"";; 1) echo "Отказ от ввода.";; 255) echo "Нажата клавиша ESC.";; esac

Календарь и настройка часов

Информация о годе, месяце и дне выводится на отдельных панелях. Если значение дня,месяца или года не указано, либо оно отрицательное, то используются системная дата. (Работает только в dialog. Указать в качестве начального значения , например, 1000-й год не получится – dialog воспринимает это как неверное значение и указывает текущую дату. Для изменения значений можно использовать стрелки управления курсором, либо воспользоваться горячими клавишами, используемыми в vi при навигации по тексту: h, j, k и l. Если год устанавливается равным 0, то по умолчанию используется значение текущего года. Результат выводится в формате день/месяц/год

#!/bin/sh DIALOG=${DIALOG=dialog} USERDATE=`$DIALOG --stdout --title "Календарь" --calendar "Выберите дату..." 00 7 7 1981` case $? in 0) echo "Выбрано: $USERDATE.";; 1) echo "Отказ от ввода.";; 255) echo "Нажата клавиша ESC.";; esac

Настройка часов

Этот диалог позволяет вам выбирать время:

#!/bin/sh DIALOG=${DIALOG=Xdialog} USERTIME=`$DIALOG --stdout --title "Настройка часов" \ --timebox "Укажите,пожалуйста, время..." 0 0 12 34 56` case $? in 0) echo "Указано время: $USERTIME.";; 1) echo "Отказ от ввода.";; 255) echo "Нажата клавиша ESC.";; esac

Подсказки

Ваш скрипт сможет самостоятельно делать выбор между dialog и Xdialog, если в его начале дописать следующую конструкцию:

if [ -z $DISPLAY ] then DIALOG=dialog else DIALOG=Xdialog fi