dialogo: Kiel krei menuojn en via skriptoj

dialog, mensajebox, tittle, backtittle, Script, titulo, Bash, Debian, Ubuntu

Dialogo estas komando de GNU / Linukso kiu permesas krei dialogujoj en la fina stacio por vi uzi en via skriptoj programado, Mi montros vin kiel uzi ĉi komando.

Para la realización de este articulo me he basadoen el manual del comando y en las siguientes páginas webs darles mis mas sinceros agradecimientos a los creadores.

http://ovtoaster.com/scripts-en-linux-con-estilo/
http://linuxgazette.net/101/sunil.html

La koloroj en la aplikoj kaj sistemoj

skribita tekstoj en la komandlinio: blua
Eligo en la komandlinio: verde
Dosiero nomoj kaj dosier enhavo: brunaj

Instalación de dialog

Para poder utilizar esta herramienta en linux lo primero que has de hacer es instalarla

Ubuntu

sudo apt-get install dialog

Debian

apt-get install dialog

Red hat

yum install dialog

Suse

zypper install dialog

Sintaxis

Para cajas con solo una opción.

Tanto <ancho-de-caja> <alto-de-caja> se representa con valores numéricos si ponemos 0 se ajustan al contenido.

dialog <opciones-comunes> <opciones de caja> <ancho-de-caja> <alto-de-caja>

Ekzemplo:

dialog --title "Titulo"  --yesno "¿Te gusta el color rojo?" 0 0

Para cajas con multiples opciones

Es solo es para las cajas de tipo checklist, menú o radiolist. Si ponemos 0 En <numero-de-opciones-visibles> se ajusta automáticamente al nº de opciones.

dialog <opciones-comunes> <opciones de caja> <ancho-de-caja> <alto-de-caja> <numero-de-opciones-visibles>.

Ekzemplo:

dialog --checklist "Escoge las opciones que desees:" 0 0 0  1 queso on 2 "Mostaza" On  3 anchoas off

Opciones comunes

Son opciones que están presentes en la mayoría de los tipos de cuadros de dialogo dedialoglas mas comunes son las siguientes:

 

Títulos

dialog, mensajebox, tittle, backtittle, Script, titulo, Bash, Debian, Ubuntu

title

Se utiliza para ponerle título al cuadro de dialogo.

backtitle

Es el titulo del fondo de la ventana.

Cambiar texto botones

yes-label

Cambia la palabra YES de los cuadros de dialogo por la que tu desees.

oklabel

Cambia la palabra OK de los cuadros de dialogo por la que tu desees.

cancel-label

Cambia la palabra CANCEL de los cuadros de dialogo por la que tu desees.

exit-label

Cambia la palabra EXIT de los cuadros de dialogo por la que tu desees.

no-label

Cambia la palabra NO de los cuadros de dialogo por la que tu desees.

nook

Quita el botón de OK del cuadro de dialogo hay que pulsar enter para entrar.

Salida del comando

Estas variables permiten decidir por donde saldrán las opciones escogidas en el comando por defecto saldrán por la salida de error si queremos podemos sacarlo a pantalla.

stderr

Salida del comando a la salida de error si escogemos esta opcion podemos sacar el resultado a un archivo añadiendo al final de la linea de dialog:

2><archivo donde guardar la salida>

stdout

Con esta opción nos mostrara en pantalla la salida del comando yo la utilizo cuando quiero almacenar en una variable el comando pero no quiero volcarla a un archivo temporal, mas adelante en los ejemplos veremos como.

 

Opciones de caja

Caja de mensaje (–msgbox)

dialog, mensajebox, tittle, backtittle, Script, titulo, Bash, Debian, Ubuntu

Sirve para poner un mensaje en pantalla hasta que el usuario pulse enter.

dialog --title "Título" --msgbox "Hola Mundo" 0 0

Menú SI/NO (–yesno)

dialog, yesno, Script, Bash, Debian, Ubuntu

Sirve para responder preguntas con respuesta SI/NO si la respuesta es SI devuelve 0 si la respuesta es NO devuelve 1

dialog --title "Titulo"  --yesno "¿Te gusta el color rojo?" 0 0

Caja de información (–infobox)

dialog, infobox, Script, titulo, Bash, Debian, Ubuntu

Esta caja muestra en pantalla la información que nosotros queramos es conveniente añadir un sleep (comando que espera x segundos para continuar) para poder verla.

dialog --infobox "Espera 4 segundos" 0 0 ; sleep 4

Caja de entrada (–inputbox)

dialog, inputbox, Script, titulo, Bash, Debian, Ubuntu

Se utiliza para recoger datos.

 dialog --title "nombre" --inputbox "Pon tu nombre:" 0 0

Caja de password (–passwordbox)

dialog, passwordbox, Script, Bash, Debian, Ubuntu

Es igual que la caja de entrada pero no se muestran los caracteres que se escriben.

 dialog --title "Contraseña" --passwordbox "Pon tu contraseña:" 0 0

Caja de texto (–textbox)

dialog, tesxtbox, Script, Bash, Debian, Ubuntu, Linux, GNU/linux

La caja de texto es un visor de archivos y nos muestra el archivo que le indiquemos.

dialog --title "archivo fstab" --textbox /etc/fstab 0 0

Caja de menu (–menu)

dialog, menu, Script, Bash, Debian, Ubuntu, Linux, GNU/linux, caja de menu

Nos permite escoger una opcion entre varias opciones numeradas

dialog --menu "La mejor tortilla es:" 0 0 0 1 "con cebolla" 2 "sin cebolla" 3 "con piminetos" 

Caja de checklist (–checklist)

dialog, checklist, Script, Bash, Debian, Ubuntu, Linux, GNU/linux

Es un menú con varias opciones de las que podemos escoger varias. Las opciones que pongamos en On estarán encendidas y las que pongamos en Off apagadas.

dialog --checklist "Escoge las opciones que desees:" 0 0 0  1 queso on 2 "Mostaza" On  3 anchoas off

Una mención especial dentro de checklist para la opciónseparate-output que nos devuelve una linea por cada selección realizada muy útil para ejecutar diferentes comandos por cada selección realizada.

Caja de radiolist (–radiolist)

dialog, radiolist, Script, Bash, Debian, Ubuntu, Linux, GNU/linux

Es un menu con varias opciones de las que podemos escoger solo una.

dialog --radiolist "Escoge tu tortilla favorita:" 0 0 0 1 "Con cebolla" Off  2 "Sin cebolla" On 3 "De pimientos" Off 4 "De esparragos" Off

Caja de calendario (–calendar)

dialog, calendar, calendario, Script, Bash, Debian, Ubuntu, Linux, GNU/linux

Es un calendario donde podemos escoger una fecha.

dialog --title "Calendario" --calendar "Escoge una flecha" 0 0

Otras opciones de caja

Ademas de las opciones de caja que hemos visto hay otras opciones que pueden ser interesantes de utilizar para conocerlas no dudes en acudir a la ayuda.

man dialog

Como utilizar los datos obtenidos con dialog

Para poder utilizar en un script los datos recogidos por los cuadros de dialogo de dialog hay varaias opciones que yo he encontrado, pero seguro que a vosotros se os ocurren mas no dudeis en comunicarmelas y las añadiré en el post.

Redireccionar la salida de dialog a un archivo.

Podemos almacenar la salida del comando dialog a un archivo, normalmente lo pondremos en la carpeta /tmp y lo borraremos después de utilizarlo, a continuación os pongo un script con un ejemplo explicado.

#!/Bin/bash
# Por Ignacio Alba Obaya
# Http://aplicacionesysistemas.com
# ejecutamos el cuadro de dialogo poniendo al final 2>/tmp/nombre.tmp.$$ 
# almacenamos en un archivo el nombre introducido.
# recordar que 2> redirecciona la salida de error a un archivo.
dialog --title "Nombre" --inputbox "Pon tu nombre:" 0 0 2>/tmp/nombre.tmp.$$
# borramos la pantalla
clear
# mostramos el nombre almacenado 
cat /tmp/nombre.tmp.$$
# borramos el archivo con el nombre
rm -f /tmp/nombre.tmp.$$
# hacemos un salto de linea para que no se nos amontone con el prompt
echo -e "\N"

Almacenar la respuesta en una variable.

Para almacenar el resultado lo realizaremos creando una función y llamandola desde una variable.

#!/Bin/bash
# Por Ignacio Alba Obaya
# Http://aplicacionesysistemas.com
# Almacenar el resultado de dialog en una variable
# creamos la funcion fundialog 
fundialog=${fundialog=dialog}
# creamos una variable fecha con la salida de dialog 
# redireccinando con --stdout la salida de dialog 
# a la salida estandar, fijate en que la función esta entre 
# acentos de los de la tecla [ si no es asi no funciona.
fecha=`$fundialog --stdout --title "Calendario" --calendar "Escoge una fecha" 0 0`
# Mostramos la fecha capturada
echo $fecha

Como gestionar salidas de checklist

También tenemos que poder gestionar multiples opciones de salida cuado tenemos un checklist de tal manera que cada opción desencadene diferentes eventos. Una manea de hacer esto es la siguiente:

#!/Bin/bash
# Por Ignacio Alba Obaya
# Http://aplicacionesysistemas.com

# Creamos la varaible funcheck en la que almacenamos la 
# orden dialog con la opción --separate-output
funcheck=(dialog --separate-output --checklist "Selecciona los grupos a los que pertenece:" 0 0 0)

# Definimos las opciones que apareceran en pantalla
# aparecerán encendidas las que marquemos con on.
opciones=(1 "opción 1" On 
 2 "opción 2" Off
 3 "opción 3" Off
 4 "opción 4" Off
 5 "opción 5" On
 6 "opción 6" Off
 7 "opción 7" Off)

# Creamos la funcion selecciones que ejecuta funcheck con opciones 
# y reenvia la salida al terminal para que el for siguiente ejecute
# los comandos
selecciones=$("${funcheck[@]}" "${opciones[@]}" 2>&1 >/dev/tty)

# limpiamos la pantalla
clear

# añadimos un for para que ejecute un comando en función de 
# las selecciones realizadas puedes cambiar el echo por 
# cualquier comando o secuencias de comandos
for seleccion in $selecciones
do
 case $seleccion in
 1)
 #?Eti "Escogiste la opción 1"
 ;;
 2)
 #?Eti "Escogiste la opción 2"
 ;;
 3)
 #?Eti "Escogiste la opción 3"
 ;;
 4)
 #?Eti "Escogiste la opción 4"
 ;;
 5)
 #?Eti "Escogiste la opción 5"
 ;;
 6)
 #?Eti "Escogiste la opción 6"
 ;;
 7)
 #?Eti "Escogiste la opción 7"
 ;;
 esac
done

Conclusiones sobre dialog

En mi opinión dialog es una forma elegante de crear menús para nuestros scripts permite de manera sencilla crear programas para terminal.

Darte las gracias por leer nuestro blog espero que te guste nuestro contenido, te pediria que no olvides dar +1 o compartir en las redes sociales, no ganamos nada con este blog y es para nosotros cada me gusta o mas 1 es una pequeña recompensa 😀


About Ignacio Alba Obaya

T?Cnico microinform?Tico kaj formador por la posteno. Amanto de la novaj tecnol?Gias. Administra de GNU/Linukso kaj Vindozo.

Leave al Reply