Zenity. Una forma de mejorar tus shell script.
Zenity utiliza las librerías GTK+ para crear diálogos en tus shell script. Hasta ahora los shell script que he venido realizando son todos en modo texto y aburridos. Con Zenity se pueden hacer más interactivos y pueden darle un valor añadido.
No obstante, no pienses que con Zenity vas a poder hacer aplicaciones como con Java, Perl o Python. Nada más lejos de la realidad. De todas formas, Zenity puede hacer que tus script sean menos monótonos y más atractivos. Cualquiera que programe shell script le parecerá una herramienta muy útil.
Básicamente para mostrar mensajes al usuario y para recibir información de él.
Empezaremos a ver cómo funciona Zenity:
1. Mostrar información al usuario.
Con Zenity se pueden mostrar varios tipos de mensajes al usuario. Existen cuatro categorías:
- error
- information
- question
- warning
El tipo de cada uno de estos mensajes es obvio. Empezemos mostrando algunos ejemplos:
$ zenity --error --title="Myfpschool.com" --text "LO SIENTO, TE ACABA DE PETAR EL ORDENADOR"
El comando anterior mostrará por pantalla el siguiente mensaje:
Como se puede ver, es sencillo mostrar un mensaje al usuario. En el comando, después de «–title=» colocaremos el título del diálogo y después de «–text» el texto que queremos que aparezca en el diálogo.
Veamos otro ejemplo pero haciendo una pregunta al usuario:
$ zenity --question --title="Myfpschool.com" --text "¿Te parece interesante este artículo?"
Como puedes ver, en este caso al ser una pregunta (question), aparece un diálogo que tiene dos opciones si o no. ¿Cómo se controla si el usuario pulsa el botón de si o no? Pues muy fácil. Copia y pega el comando anterior en un terminal y una vez ejecutado el comando teclea lo siguiente:
$ echo $? 0
Al poner echo $? te responderá con un 0 si el usuario pulsó si y 1 si el usuario pulsó no.
Dentro de un script podrías hacer lo siguiente:
#!/bin/sh zenity --question --title=”Myfpschool.com” --text “¿Te parece interesante este artículo?” var=$(echo $?) if [ "$var" -gt 0 ]; then echo "el usuario pulsó no" else echo "el usuario pulsó si" fi
Para ejecutar un script tienes que copiar el código anterior. Salvarlo con extensión sh (opcional pero preferible). Darle permiso de ejecución (chmod +x script.sh) y por último ejecutarlo (./script.sh).
Como puedes ver, en la variable var guardamos si el usuario pulsa sí o no y de esa manera siempre puede utilizar $var dentro de tu script.
2. Recabar información del usuario.
Bueno, ya sabemos cómo mostrar información al usuario e incluso mostrar un diálogo y controlar la respuesta del mismo. No obstante, muchas veces necesitamos que el usuario nos proporcione información y eso lo haremos con la opción entry de Zenity. La opción
--entry
muestra un campo de texto en el cual el usuario puede incluir información y también puede ir acompañada de las siguientes opciones:
--text=text
Imprescindible desde mi punto de vista: En él se especifica el texto que se muestra en la caja de diálogo.
--entry-text=text
Utilizaremos esta opción si queremos que haya un texto por defecto en el cuadro de texto.
hide-text
Oculta el texto que se escriba en el campo de texto para que no sea visible. Se utiliza cuando el campo de texto utilizado es para una password.
Veamos un ejemplo de uso en un shell script:
#!/bin/sh respuesta=$(zenity --entry --title="Myfpschool.com" --text="Tu opinión sobre este artículo") var=$(echo $?) if [ "$var" -gt 0 ]; then echo "el usuario no escribió nada" else echo "el usuario escribió $respuesta" fi
Este script no solamente controla si se ha escrito algo en el campo de texto sino que además almacena en la variable $respuesta el comentario introducido por el usuario.
Veamos un ejemplo parecido al anterior pero utilizando una password. El script sería el siguiente:
#!/bin/sh clave=$(zenity --entry --title="Myfpschool.com" --text="Teclea la clave" --entry-text "password" --hide-text) var=$(echo $?) if [ "$var" -gt 0 ]; then echo "el usuario no escribió nada" else echo "el usuario escribió $clave" fi
3. Trabajando con ficheros.
Una de las formas más útiles de Zenity es el poder abrir diálogos para seleccionar ficheros. En en siguiente script se explica cómo.
#!/bin/sh fich=$(zenity --file-selection --title="Selecciona un fichero") resp=$? echo $resp if [ $resp -eq 0 ]; then echo "fichero $fich seleccionado." else echo "No seleccionó ningún fichero." fi
Copia este script a un archivo con extensión sh y ejecútalo. Verás cómo se abre una ventana de diálogo y en caso de seleccionar algún archivo lo muestra por el terminal.
4. Ejercicios.
– Realiza un script que pida al usuario un fichero y una palabra. De que tengas estos dos datos el script tiene que determinar si dicha palabra existe en el fichero o no (utiliza diálogos tipo information/error dependiendo si la palabra existe en el fichero o no.