Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Создание диалоговых боксов в интерактивных скриптах оболочки

Оригинал: How to create dialog boxes in an interactive shell script
Автор: Dan Nanni
Дата публикации: 20 ноября 2014 года
Перевод: А. Кривошей
Дата перевода: июнь 2016 г.

При установке новых программ в консольном окружении вы часто можете видеть информативные диалоговые боксы, в которых необходимо произвести определенные действия. Среди них простые диалоги типа да/нет, поля для ввода пароля, списки, в которых необходимо отметить требуемые элементы, меню и так далее. Их преимущества очевидны, так как они делают процесс установки интуитивно понятным пользователю.

диалоговый бокс

Если вы пишете интерактивный скрипт оболочки, вы можете использовать такие диалоговые боксы для пользовательского ввода. Программа whiptail, предустановленная во всех современных дистрибутивах Linux, позволяет упростить процесс создания консольных диалоговых боксов в скриптах.
В этом руководстве мы рассмотрим создание дружественных пользователю диалоговых боксов в скриптах оболочки с помощью whiptail. Мы также продемонстрируем фрагменты кода Bash различных диалоговых боксов, поддерживаемых whiptail.

Создание бокса с сообщением

Бокс с сообщением показывает любой текст с кнопкой подтверждения для продолжения выполнения скрипта.

whiptail --title "<message box title>" --msgbox "<text to show>" <height> <width>

Пример:

Бокс с сообщением

Создание бокса да/нет

Широко распространенный вариант, когда пользователь может выбрать "да" или "нет".

Пример:

#!/bin/bash
if (whiptail --title  "Test Yes/No Box" --yesno  "Choose between Yes and No." 10 60)  then
     echo "You chose Yes. Exit status was $?."
else
     echo "You chose No. Exit status was $?."
fi

бокс да/нет

Опционально вы можете заменить текст на кнопках "Yes" и "No" с помощью опций "--yes-button" и "--no-button".

Пример:

бокс да/нет  с заменой текста

Создание поля ввода с произвольным текстом

Если вы хотите дать пользователю возможность вводить любой текст, вы можете использовать input box.

Пример:

поле ввода с произвольным текстом

Создание поля ввода пароля

Поле для ввода пароля полезно, если вы хотите дать пользователю возможность скрывать вводимые символы.

whiptail --title "<password box title>" --passwordbox "<text to show>" <height> <width>

Пример:

поле ввода пароля

Создание бокса с меню

Если вы хотите, чтобы пользователь выбирал из заранее предопределенных вариантов, используйте menu box.

Пример:

бокс с меню

Создание диалога Radiolist

radiolist box похож на menu box в том плане, что вы можете выбрать только одну из доступных опций. Однако здесь вы можете указать, какая опция выделена по умолчанию, задав ее статус.

Пример:

#!/bin/bash
DISTROS=$(whiptail --title  "Test Checklist Dialog" --checklist \
"What is the Linux distro of your choice?" 15 60 4 \
"debian" "Venerable Debian" ON \
"ubuntu" "Popular Ubuntu" OFF \
"fedora" "Stable CentOS" OFF \
"centOS" "Rising Star Mint" OFF 3>&1 1>&2 2>&3)
 
exitstatus=$?
if [ $exitstatus = 0 ];  then
     echo "The chosen distro is:" $DISTROS
else
     echo "You chose Cancel."
fi

radiolist

Создание диалога Checklist

checklist полезен, если вы хотите дать пользователю возможность выбирать одновременно несколько опций из предопределенного списка.

Пример:

#!/bin/bash
DISTROS=$(whiptail --title  "Test Checklist Dialog" --checklist \
"Choose preferred Linux distros" 15 60 4 \
"debian" "Venerable Debian" ON \
"ubuntu" "Popular Ubuntu" OFF \
"fedora" "Stable CentOS" ON \
"centOS" "Rising Star Mint" OFF 3>&1 1>&2 2>&3)
 
exitstatus=$?
if [ $exitstatus = 0 ];  then
     echo "Your favorite distros are:" $DISTROS
else
     echo "You chose Cancel."
fi

Checklist

Создание Progress Bar

progress bar - еще один дружественный пользователю диалоговый бокс. whiptail читает процент выполнения (от 0 до 100) из стандартного ввода и отображает в виде индикатора.

whiptail --gauge "<test to show>" <height> <width> <inital percent>

#!/bin/bash
{
     for ((i = 0 ; i <= 100 ; i+=20));  do
         sleep 1
         echo $i
     done
} | whiptail --gauge  "Please wait while installing" 6 60 0

Progress Bar

Теперь вы видите, насколько просто вы можете создавать полезные диалоговые боксы в интерактивных скриптах оболочки. В следующий раз, когда вы будете писать скрипт, почему бы не попробовать whiptail?