• Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Mi Blog
⌨ Cómo crear cuadros de diálogo en tus scripts de GNU/Linux

⌨ Cómo crear cuadros de diálogo en tus scripts de GNU/Linux

Los que estamos acostumbrados a programar en Shell Scripting, echamos de menos muchas veces la opción de crear de forma rápida y atractiva scripts de shell que tengan una presentación un poco mas ... friendly. Si haces memoria, seguro que has visto alguna consola de GNU/Linux con fondo azul y un cuadro de diálogo donde te hace preguntas del tipo "introduce la contraseña del servidor de mysql" u opciones similares. Bien, os voy a enseñar como crear esas pantallas de una forma súper rápida y funcional. Como es lógico, se necesita un conocimiento básico/medio de Shell Scripting para poder adaptar tus scripts a las necesidades de estas pantallas.

Whiptail es un programa que permite mostrar cuadros de diálogo en nuestro shell y poder dar algo mas de color a nuestros shell scripts. Podemos crear menus, check list, barras de progreso y todo de una forma muy friendly. Whiptail viene incluido por defecto en GNU/Linux Debian.

¡Espero que os guste mucho este nuevo tutorial!

1.- ELEMENTOS UTILIZADOS EN ESTE TUTORIAL

Los recursos utilizados para este tutorial han sido:

  • GNU/Linux Debian 8 64bits

2.- CREAR DIÁLOGOS "INFO"

Un cuadro de diálogo sencillo en Whiptail es el info box. Muestra un cuadro de diálogo que contiene el texto que el usuario especifica. En la sintaxis , la opción de --title muestra el título en la parte superior del cuadro de diálogo. El argumento --infobox indica el texto que contendrá el cuadro de diálogo debajo del título. Los últimos 2 argumentos indican el algo y el ancho del cuadro de diálogo. El ancho suele tomar el valor de 78 ya que la mayoría de terminales tienen un total de 80 columnas o más.

Sintaxis:

whiptail --title "" --infobox ""  

Mi ejemplo de info box:

whiptail --title "EJEMPLO INFO BOX" --infobox "Bienvenidos a mi web www.raulprietofernandez.net" 8 78

Cuadro de DialogoInfo Box

3.- CREAR DIÁLOGOS "MESSAGE"

El cuadro de diálogo de tipo message box es muy similar al de info box, excepto que en este caso, se espera a que el usuario presione el botón de OK antes de continuar. El uso es bastante similar.

Sintaxis:

whiptail --title "" --infobox ""  

Mi ejemplo de message box:

whiptail --title "EJEMPLO MESSAGE BOX" --infobox "Pulsa  para salir" 8 78

Cuadro de DialogoMessage Box

4.- CREAR DIÁLOGOS "YES/NO"

Una forma sencilla de obtener órdenes del usuario es a través de un cuadro de diálogo de Si/No. Este cuadro de diálogo muestra 2 botones con la etiqueta Si/No, aunque esta etiqueta se puede cambiar.

Sintaxis:

whiptail --title "" --yesno ""   

Mi ejemplo de yes/no box:

#/bin/bash
if (whiptail --title "EJEMPLO SI/NO" --yesno "Este es un ejemplo de un cuadro de dialogo de si/no" 8 78) then
echo "Has seleccionado Si, exit toma el valor de $?."
else
echo "Has seleccionado No, exit toma el valor de $?."
fi

Cuadro de DialogoCuadro de diálogo Si/No

Podemos personalizar los botones de la siguiente forma:

#/bin/bash
if (whiptail --title "EJEMPLO SI/NO" --yes-button "Acepto las condiciones" --no-button "No acepto las condicioens" --yesno "¿Aceptas las Cookies de este sitio?" 8 78) then
echo "Has seleccionado Si, exit toma el valor de $?."
else
echo "Has seleccionado No, exit toma el valor de $?."
fi

Cuadro de DialogoCuadro de diálogo si/no personalizado

5.- CREAR DIÁLOGOS "INPUT"

Esta es la forma de tener un "formulario" con una caja de texto donde el usuario puede meter un texto. Además, debajo de la zona de input, existen 2 botones de OK/Cancel.

Sintaxis:

whiptail --title "" --inputbox ""   

Mi ejemplo de input box:

#!/bin/bash
FAVCAR=$(whiptail --title "TEST INPUT FORM BOX" --inputbox "Cual es tu marca preferida de coches?" 10 60 "Pon aqui la marca" 3>&1 1>&2 2>&3)

exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Tu marca preferida es:" $FAVCAR
else
echo "Seleccionaste cancelar."
fi

Cuadro de DialogoEjemplo de input box

6.- CREAR DIÁLOGOS "PASSWORD"

La forma de ocultar los caracteres que el usuario escribir en el "input" es a través de un password box. Además, dispone de un botón de OK y otro de Cancel.

Sintaxis:

whiptail --title "" --passwordbox ""  

Mi ejemplo de password box:

#!/bin/bash
PASSWORD=$(whiptail --title "PASSWORD TEXT BOX" --passwordbox "Introduce tu password y pulsa OK para continuar." 10 60 3>&1 1>&2 2>&3)

exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Tu password es:" $PASSWORD
else
echo "Has seleccionado cancelar."
fi

Cuadro de DialogoPassword box

7.- CREAR DIÁLOGOS "TEXT"

El cuadro de diálogo text box muestra el contenido de un fichero ó variable.

Sintaxis:

whiptail --textbox   

Mi ejemplo de text box:

#!/bin/bash
echo "Mi kernel es\n"`uname -a` > contenido_textbox
whiptail --textbox contenido_textbox 12 80

Cuadro de DialogoEjemplo de text box

8.- CREAR DIÁLOGOS "MENU"

Cuando necesitamos presentar una serie de opciones al usuario, whiptail nos ofrece diversas formas de hacerlo.

Un menu debemos usarlo cuando queremos que el usuario selecciona una única opción de una lista, como por ejemplo su edad.

Los valores que podemos dar al cuadro ed diálogo de --menu son:

  • El texto introductorio del menú
  • El alto del cuadro de diálogo
  • El ancho del cuadro de diálogo
  • El alto del menú

El resto de las opciones son una lista de opciones del menú en el formato tag item, donde tag es el nombre de la opción mostrada en stderr cuando es seleccionada y el item es la descripción que sale en el menú.

Si el menú que queremos hacer es muy grande, debemos tener en cuenta las dimensiones del cuadro de diálogo y la del menú.

Sintaxis:

whiptail --title "" --menu ""    [   ] . . .

Mi ejemplo de menu box:

#!/bin/bash
MENUOPCION=$(whiptail --title "MENU BOX" --menu "Selecciona un color" 15 60 4 \
"1" "Rojo" \
"2" "Verde" \
"3" "Azul" \
"4" "Rosa" 3>&1 1>&2 2>&3)

exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Has seleccionado la opcion:" $MENUOPCION
else
echo "Seleccionaste Cancelar."
fi

Cuadro de DialogoEjemplo de menu box

9.- CREAR DIÁLOGOS "CHECK LIST"

En este punto, queremos mostrar al usuario una serie de opciones sin limitación de cuantas puede seleccionar.

Una check list permite al usuario seleccionar más de una opción de menú.

Cuando el usuario confirma las opciones, la lista es mostrada en stderr.

Sintaxis:

whiptail --title "" --checklist ""    [    ] . . .

Mi ejemplo de check list:

#!/bin/bash
OPERATIVESYSTEM=$(whiptail --title "CHECKLIST BOX" --checklist \
"Selecciona tu S.O. preferido" 15 60 4 \
"Windows" "Usuarios habituales" OFF \
"Linux" "Les gusta ser diferentes" OFF \
"MAC OS" "No saben que es BSD" OFF \
"Otro" "Otros sistemas..." OFF 3>&1 1>&2 2>&3)

exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Mi Sistema Operativo preferido es:" $OPERATIVESYSTEM
else
echo "Seleccionaste Cancelar."
fi

Cuadro de DialogoEjemplo de check list

10.- CREAR DIÁLOGOS "RADIO LIST"

Un radio list es un cuadro de diálogo donde el usuario puede seleccionar una opción de entra las opciones posibles. La diferencia entre el radio list y el menu es que el selecciona una opción (usando la barra espaciadora) y luego tiene que confirmar pulsando OK:

Sintaxis:

whiptail --title "" --radiolist ""    [    ] . . .

Mi ejemplo de radio list:

#!/bin/bash
OPERATIVESYSTEM=$(whiptail --title "CHECKLIST BOX" --radiolist \
"Selecciona tu S.O. preferido" 15 60 4 \
"Windows" "Usuarios habituales" OFF \
"Linux" "Les gusta ser diferentes" OFF \
"MAC OS" "No saben que es BSD" OFF \
"Otro" "Otros sistemas..." OFF 3>&1 1>&2 2>&3)

exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Mi Sistema Operativo preferido es:" $OPERATIVESYSTEM
else
echo "Seleccionaste Cancelar."
fi

Cuadro de DialogoEjemplo de radio list

11.- CREAR DIÁLOGOS "PROGRESS GAUGE"

Un progress gauge es la barra de progreso de siempre. Podemos pasarle valores por stdin o a través de un script. En mi ejemplo, he creado una barra de progreso que dura 30 segundos.

Sintaxis:

whiptail --gauge    []

Mi ejemplo de progress gauge:

#!/bin/bash
{
for ((i = 0 ; i = 30 ; i+=1)); do
sleep 1
echo $i
done
} | whiptail --gauge "Esto es un contador de 30 segundos" 6 60 0

Cuadro de DialogoEjemplo de progress gauge

ENJOY!


Raúl Prieto Fernández

Sitio Web: /

Si quieres ir rápido, ve solo. Si quieres llegar lejos, ve acompañado.

Comentarios  

Hugo
# Hugo 29-09-2017 23:54
Al ejecutar los comandos no muestra los cuadros de dialogo uso debian 9
Responder
Ral Prieto Fernndez
# Raúl Prieto Fernández 01-10-2017 15:36
Hola Hugo:

Los cuadros de diálogos se pueden crear con : dialog, whiptail, zenity etc etc ... En este tutorial he usado whiptail.

¿Que error te da exactamente?

Un saludo!
Responder

Escribir un comentario

Información básica sobre Protección de Datos

Responsable: Raúl Prieto Fernández +info

Finalidad: Moderar los comentarios a los artículos publicados en el blog. +info

Legitimación: Consentimiento del interesado +info

Destinatarios: No se comunicarán datos a persona u organización alguna. +info +info

Derechos: Tiene derecho a Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la información adicional. +info

Plazo de conservación de los datos: Hasta que no se solicite su supresión por el interesado.

Información adicional: Puede consultar la información adicional y detallada sobre Protección de Datos Personales en mi página web raulprietofernandez.net +info

     

Código de seguridad
Refescar


LOGIN / ENTRAR

BUSCAR EN EL BLOG

TWITTER TIMELINE

Posts Relacionados

Booking.com

ENCUESTA

¿Cual es el mejor Sistema Operativo?

Como es lógico, esta web utiliza cookies propias y de terceros para elaborar información estadística y mostrar publicidad personalizada a través del análisis de tu navegación, conforme a la política de cookies.

  Si continúas navegando, aceptas su uso.