Создание диалоговых окон в Bash

Allsoft

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

Создание диалоговых окон в Bash

 

Утилита whiptail, входящая во все современные дистрибутивы Linux, позволяет обеспечить создание различных диалоговых окон в Bash скриптах.

Диалоговое окно с сообщением

Диалог, позволяющий вывести произвольный текст, с кнопкой подтверждения. Приостанавливает работу скрипта, пока пользователь нажмет ОК.

whiptail --title "<message title>" --msgbox "<text>" <height> <width>

Примеры:

#!/bin/bash
whiptail --title "Message Box" --msgbox "Create a message box with whiptail. Choose Ok to continue." 10 60
#!/bin/bash
whiptail --title "Message Box" --msgbox "Lorem ipsum dolor sit amet, \
consectetur adipiscing elit. Nulla venenatis ornare arcu, eu dapibus augue. \
Nulla accumsan tellus ac facilisis ultricies. Nulla feugiat gravida dui at dignissim... \
\nChoose Ok to continue." 10 70

Диалог msgbox

Диалоговое окно подтверждения (да/нет)

Выводит диалог подтверждения с кнопками yes и no, ожидая подтверждение действий от пользователя. К примеру что пользователь согласен продолжить установку или подтвердить параметры.

whiptail --title "<dialog title>" --yesno "<text>" <height> <width>

Пример:

if (whiptail --title "Test Yes/No Box" --yesno "Are you sure?" 10 60) then
    echo "You chose Yes. Status $?."
else
    echo "You chose No. Status $?."
fi

yesno dialog

 

Опционально, можно изменить текст кнопок Yes и No, используя опции "--yes-button" и "--no-button"

if (whiptail --title "Test Yes/No Box" --yesno "Are you sure?" --yes-button="Да, уверен" --no-button="Совсем не уверен" 10 60) then
    echo "You chose Yes. Status $?."
else
    echo "You chose No. Status $?."
fi

Диалоговое окно ввода текста

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

whiptail --title "<input title>" --inputbox "<text>" <height> <width> <default-text>

Пример:

#!/bin/bash
NAME=$(whiptail --title "Input Box Form" --inputbox "What is your name?" 10 60 Termit 3>&1 1>&2 2>&3)

exitstatus=$?
if [ $exitstatus = 0 ]; then
    echo "Your name is:" $NAME
else
    echo "You chose Cancel."
fi

inputbox dialog

Диалоговое окно ввода пароля

Данный тип диалога позволяет скрывать вводимые символы.

whiptail --title "<password title>" --passwordbox "<text>" <height> <width>

Пример:

#!/bin/bash
PASSWORD=$(whiptail --title "Password Dialog" --passwordbox "Enter your password." 10 60 3>&1 1>&2 2>&3)

exitstatus=$?
if [ $exitstatus = 0 ]; then
     echo "Your password is:" $PASSWORD
else
     echo "You chose Cancel."
fi

passwordbox dialog

Диалоговое окно с меню

Когда необходимо что бы пользователь выбрал из заранее предложенного списка, создается диалоговое окно menu

whiptail --title "<menu title>" --menu "<text>" <height> <width> <menu height> [ <tag> <item> ]

Пример:

#!/bin/bash
OPTION=$(whiptail --title "Menu Dialog" --menu "Choose text" 15 60 4 \
"1" "Lorem ipsum dolor sit amet" \
"2" "Consectetur adipiscing elit" \
"3" "Nulla venenatis ornare arcu" \
"4" "Nulla accumsan tellus ac facilisis ultricies" 3>&1 1>&2 2>&3)

exitstatus=$?
if [ $exitstatus = 0 ]; then
    echo "Your chosen option:" $OPTION
else
    echo "You chose Cancel."
fi

Menu Dialog

 

Диалоговое окно переключения (Radiolist)

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

whiptail --title "<radiolist title>" --radiolist "<text>" <height> <width> <list height> [ <tag> <item> <status> ]

Пример:

#!/bin/bash
OPTION=$(whiptail --title  "Radiolist Dialog" --radiolist \
"Chose text" 15 60 4 \
"1" "Lorem ipsum dolor sit amet" OFF \
"2" "Consectetur adipiscing elit" ON \
"3" "Nulla venenatis ornare arcu" OFF \
"4" "Nulla accumsan tellus ac facilisis ultricies" OFF \
3>&1 1>&2 2>&3)

exitstatus=$?
if [ $exitstatus = 0 ];  then
     echo "Your chosen option:" $OPTION
else
     echo "You chose Cancel."
fi

 

Radiolist Dialog

Диалоговое окно выбора (Checklist)

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

whiptail --title "<checklist title>" --checklist "<text>" <height> <width> <list height> [ <tag> <item> <status> ]

#!/bin/bash
OPTION=$(whiptail --title "Checklist Dialog" --checklist \
"Chose text" 15 60 4 \
"1" "Lorem ipsum dolor sit amet" OFF \
"2" "Consectetur adipiscing elit" ON \
"3" "Nulla venenatis ornare arcu" OFF \
"4" "Nulla accumsan tellus ac facilisis ultricies" OFF \
3>&1 1>&2 2>&3)

exitstatus=$?
if [ $exitstatus = 0 ]; then
    echo "Your chosen option:" $OPTION
else
     echo "You chose Cancel."
fi

Сhecklist Dialog

Диалоговое окно с прогрессом (Progress Bar)

Диалог, позволяющий показать прогресс. К примеру прогресс выполнения задачи, отображая процент выполнения от 0 до 100. Считывает значения из вывода, и отображает в виде прогресса.

whiptail --gauge "<text>" <height> <width> <inital percent>

Пример:

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

Создание диалоговых окон в Bash

Добавить комментарий