Quantcast
Channel: Библиотека знаний
Viewing all articles
Browse latest Browse all 1318

Dialog

$
0
0

Dialog

Установка

  • apt-get install dialog
  • brew install dialog
  • yum install dialog

Описание

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

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

Да / Нет

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

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

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

  • --title задаёт заголовок диалога
  • --clear очищает экран перед отображением диалога
  • --yesno задаёт тип диалога и текст для отображения.

Ввод данных

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

#!/bin/shDIALOG=${DIALOG=dialog}tempfile=`tempfile2>/dev/null`||tempfile=/tmp/test$$trap"rm -f $tempfile"012515 
$DIALOG--title"Ввод данных"--clear \
        --inputbox"Привет! Перед вами пример ввода даных\nВведите своё имя:"16512>$tempfile 
retval=$? 
case$retvalin0)echo"Вы ввели `cat $tempfile`";;1)echo"Отказ от ввода.";;255)iftest-s$tempfile ; thencat$tempfileelseecho"Нажата клавиша ESC."fi;;esac

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

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

#!/bin/shDIALOG=${DIALOG=dialog}tempfile=`mktemp2>/dev/null`||tempfile=/tmp/test$$trap"rm -f $tempfile"012515 
$DIALOG--clear--title"Мои любимые исполнители" \
        --menu"Все любят песни хинди, поэтому выбирайте:"20514 \
        "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$retvalin0)echo"Да вы эстет! '$choice' -- это лучшее, что вы слышали в своей жизни!";;1)echo"Отказ от ввода.";;255)echo"Нажата клавиша ESC.";;esac
#!/usr/bin/env bash 
t(){type"$1"&>/dev/null;} 
function Menu.Show {local DIA DIA_ESC; while :; do
      t whiptail&&DIA=whiptail&&break
      t dialog&&DIA=dialog&&DIA_ESC=-- &&breakexecdate +s"No dialog program found"done; declare-Ao="$1"; shift 
   $DIA--backtitle"${o[backtitle]}"--title"${o[title]}" \
      --menu"${o[text]}"000$DIA_ESC"$@"; 
} 
Menu.Show '([backtitle]="Backtitle"
            [title]="Title"
            [question]="Please choose:")'          \
                                                   \
            "Option A""Stuff...."                \
            "Option B""Stuff...."                \
            "Option C""Stuff...."
$ dialog--checklist"Preferred Linux distros"15405\
               debian "Venerable Debian" off \
               ubuntu "Popular Ubuntu"   on  \
               fedora "Hackish Fedora"   off \
               centos "Stable Centos"    off \
               mint "Rising Star Mint"   off 2>distrochoice
$ dialog--title Habr --checklist«Simple checkbox menu» 12353 $(echo{hello,habra,habr}" '' 0"

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

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

#! /bin/shDIALOG=${DIALOG=dialog}tempfile=`mktemp2>/dev/null`||tempfile=/tmp/test$$trap"rm -f $tempfile"012515 
$DIALOG--backtitle"Не стесняйтесь, выберите любимого певца" \
        --title"Выбор исполнителя"--clear \
        --radiolist"Мой любимый певец, это... "20615 \
        "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$retvalin0)echo"Ого! Кто бы мог подумать, но выбор пал на '$choice'";;1)echo"Отказ от ввода.";;255)echo"Нажата клавиша ESC.";;esac

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

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

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

#!/bin/shDIALOG=${DIALOG=dialog} 
COUNT=10(whiletest$COUNT!= 110doecho$COUNTecho"XXX"echo"Новое сообщение ($COUNTпроцентов)"echo"Строка 2"echo"XXX"COUNT=`expr$COUNT + 10`sleep1done)|$DIALOG--title"Индикатор"--gauge"А вот пример простейшего индикатора"20700
#!/bin/sh 
(c=10while[$c-ne110]doecho$c((c+=10))sleep1done)|dialog--title" Тест диалога прогресса "--gauge"Please wait ...."10600 
clear

Выбор файла

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

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

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

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

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

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

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

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

Подсказки

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

if[-z$DISPLAY]thenDIALOG=dialogelseDIALOG=Xdialog
fi

Примеры / Ствтьи


Viewing all articles
Browse latest Browse all 1318