LINUX

Cómo mostrar el cuadro de diálogo usando el script de shell con ejemplos

Este tutorial le dará un par de ejemplos sobre cómo usar utilidades como zenity y whiptail en su script de shell Bash para proporcionar un mensaje / cuadro de diálogo. Con estas utilidades, su script podrá informar al usuario sobre el estado actual de ejecución o brindarle la capacidad de interactuar. La diferencia entre estas dos utilidades es la forma en que muestran el cuadro de mensaje o diálogo. Zenity usa el kit de herramientas GTK para crear interfaces gráficas de usuario, mientras que whiptail crea cuadros de mensajes dentro de la ventana de la terminal.

Herramienta Zenity

Para instalar zenity en Ubuntu, ejecute:

sudo apt-get install zenity

Dado que los comandos para crear cuadros de mensaje o diálogos con zenity se explican por sí mismos, le proporcionaremos un par de ejemplos.

Crear cuadro de información

zenity –info –title «Cuadro de información» –text «Esto debería ser información» –width = 300 –height = 200

Cuadro de información de captura de pantalla

Crear diálogo Sí / No

zenity --question --text "Do you want this?" --ok-label "Yeah" --cancel-label="Nope"

Captura de pantalla-Pregunta

Creando cuadro de entrada y almacenando valor en variable

a=$(zenity --entry --title "Entry box" --text "Please enter the value" --width=300 --height=200)
echo $a

Cuadro de captura de pantalla

Después de ingresarlo, el valor se almacenará en $ una variable.

Aquí está el ejemplo de trabajo que toma el nombre, apellido y edad del usuario y lo muestra.

#!/bin/bash
#
# This script will ask for couple of parameters
# and then continue to work depending on entered values
#

# Giving the option to user
zenity --question --text "Do you want to continue?"

# Checking if user wants to proceed
[ $? -eq 0 ] || exit 1

# Letting user input some values
FIRSTNAME=$(zenity --entry --title "Entry box" --text "Please, enter your first name." --width=300 --height=150)
LASTNAME=$(zenity --entry --title "Entry box" --text "Please, enter your last name." --width=300 --height=150)
AGE=$(zenity --entry --title "Entry box" --text "Please, enter your age." --width=300 --height=150)

# Displaying entered values in information box
zenity --info --title "Information" --text "You are ${FIRSTNAME} ${LASTNAME} and you are ${AGE}(s) old." --width=300 --height=100

Aquí están las capturas de pantalla del script anterior.

Ejemplo 1-Pregunta-1
Primera caja

Example1-Entry box-1
Caja de entrada

Example1-Entry box-2
Caja de entrada

Example1-Entry box-3
Caja de entrada

Ejemplo 1-Información
Cuadro de información

No olvides consultar algunos de los útiles opciones zenity eso podría ayudarte.

Herramienta Whiptail

Para instalar whiptail en Ubuntu ejecutar

sudo apt-get install whiptail

Los comandos para crear un cuadro de mensaje / diálogo con cola de látigo también se explican por sí mismos, por lo que le proporcionaremos solo un par de ejemplos básicos.

Creando cuadro de mensaje

whiptail --msgbox "This is a message" 10 40

Captura de pantalla-whiptail-msgbox

Crear diálogo Sí / No

whiptail --yes-button "Yeah" --no-button "Nope" --title "Choose the answer" --yesno "Will you choose yes?" 10 30

Captura de pantalla-cola-látigo-síno

Creando cuadro de entrada con valor predeterminado

whiptail --inputbox "Enter your number please." 10 30 "10"

Captura de pantalla de entrada de cola de látigo

Una cosa a tener en cuenta al intentar usar el valor ingresado es que whiptail usa stdout para mostrar el diálogo y stderr para la salida del valor. De esa manera, si usa var = $ (…) no verá ningún cuadro de diálogo y no obtendrá el valor ingresado. La solución es cambiar stdout y stderr. Para hacer eso solo agrega 3> & 1 1> & 2 2> & 3 al final del comando de cola de látigo. Lo mismo sucedería con cualquier comando whiptail que desee usar para obtener algún valor ingresado.

Crear diálogo de menú

whiptail --menu "This is a menu. Choose an option:" 20 50 10 1 "first" 2 "second" 3 "third"

Captura de pantalla-menú-cola-látigo

Aquí hay un script de shell que le pide al usuario que ingrese una ruta a una carpeta y luego muestra su tamaño.

#!/bin/bash
#
#

# Since whiptail has to use stdout to display dialog, entered value will
# be stored in stderr. To switch them and get the value to stdout you must
# use 3>&1 1>&2 2>&3
FOLDER_PATH=$(whiptail --title "Get the size of folder" 
--inputbox "Enter folder path:" 
10 30 
"/home" 
3>&1 1>&2 2>&3)

if [ -d $FOLDER_PATH ]
then
size=$(du -hs "$FOLDER_PATH" | awk '{print $1}')
whiptail --title "Information" 
--msgbox "Size of ${FOLDER_PATH} is ${size}" 
10 40
elif [ -f $FOLDER_PATH ]
then
whiptail --title "Warning!!!" 
--msgbox "The path you entered is a path to a file not a folder!" 
10 40
else
whiptail --title "Error!!!"
--msgbox "Path you entered is not recognized. Please try again" 
10 40
fi

Aquí están las capturas de pantalla del ejemplo anterior:

Example2-Entry-box
Caja de entrada
Ejemplo 2-Información
Cuadro de información

Si está trabajando en la terminal, páginas de manual están siempre disponibles.

Conclusión

La elección de la herramienta adecuada para mostrar los cuadros de diálogo dependerá de si espera que su secuencia de comandos se ejecute en una máquina de escritorio o en una máquina servidor. Los usuarios de máquinas de escritorio utilizan principalmente el entorno de ventana y posiblemente podrán ejecutar el script e interactuar con las ventanas que aparecen. Sin embargo, si espera que el usuario sea alguien en la máquina del servidor, es posible que desee ir a lo seguro y usar whiptail o cualquier otra utilidad que muestre cuadros de diálogo en una ventana de terminal simple.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar