Библиотека сайта 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
Создание диалога 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
Создание 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
Теперь вы видите, насколько просто вы можете создавать полезные диалоговые боксы в интерактивных скриптах оболочки. В следующий раз, когда вы будете писать скрипт, почему бы не попробовать whiptail?