Herramientas para Hacer Guiones en Bash

Los guiones son llamados scripts en inglés.
Llamada a comandos Bash
Cualquier comando que se introduzca entre acentos reversos (`) bash lo reemplazará por su salida estándar. La otra opción es introducir el código entre $(), lo cual es muy práctico sobre todo para guiones que crean guiones, pues no requieren el caracter de escape para introducir comillas.
Fuente: http://www.linuxjournal.com/article/2460

No hacer nada
Este comando es útil por ejemplo en if, cuando lo que se quiere hacer está en el else. Para hacer nada, se usa dos puntos ":"
Fuente: http://personales.mundivia.es/ryu/shell/dialog.html
Dialog

I)Se empieza con la llamada al programa. Luego se puede especificar título y título de fondo (opcionales), tipo (con sus respectivos parámetros), alto y ancho en caracteres  y por último elementos adicionales según el tipo.
II)Para los valores de los parámetros se pueden  emplear variables, que luego son llamadas entre comillas y precedidas del signo $.
III)Se pueden usar el caracter de escape \. Ejemplo: \n introduce una marca de párrafo. Para títulos y elementos que necesitan espacio, se debe emplear comillas, sino, no es necesario.
Los que cuentan con botón Cancelar generan un código distinto a 0 en la salida estándar ($?) cuando es pulsado, lo que puede usarse para revisar que no se haya pisado Cancelar.
Los resultados son enviados a la salida de error estándar. Para trabajar con ello, ver el ejemplo del Mensaje de entrada.
La opción --file nombre_archivo lee desde el archivo especificado los parámetros que el diálogo necesita.

Algunos tipos son: calendar, checklist, form, fselect, gauge, infobox, inputbox, inputmenu, menu, msgbox, password, pause, radiolist, tailbox, tailboxbg, textbox, timebox, y yesno. Más sobre ellos en la página man de dialog.

A continuación cómo usar algunos de ellos.

Mensaje genérico: Espera que el usuario pulse Enter.
dialog --title  "$TITULO" --msgbox "$MENSAJE" "$ALTO" "$ANCHO"

Mensaje Si/NO: permite la selección binaria. SI=0; NO=1. Con --defaultno se convierte el No en el predefinido.
dialog --title "Mensaje" --yesno "¿Te\n diviertes?" 6 25

Mensaje de información: igual al genérico, sin esperar que el usuario pulse tecla. Se suele combinar con sleep para que se mantenga un poco en pantalla.
dialog --infobox "$MENSAJE" "$ALTO" "$ANCHO" ; sleep "$TIEMPO"


Mensaje de entrada: solicita un único dato al usuario. Se guarda el resultado dirigiendo la salida de error estándar a un archivo. Para usar variables, se debe copiar a la misma el contenido del archivo. Se debería revisar previamente la no existencia del archivo para evitar sobreescribir información que se puede estar usando en otro guión y/o emplear nombres de archivo bien específicos, como en el ejemplo.
set TEMPORAL=echo "/tmp/dialog$(date | awk '{ print $2$3$6 }')"
dialog --inputbox "Indique su nombre:" 8 40 2>"$TEMPORAL"
VARIABLE=$(cat $TEMPORAL)

Mensaje de texto: Muestra el contenido de un texto, permitiendo la navegación usual por el mismo. Se debe tener cuidado en la especificación de ancho, pues se puede cortar el contenido.
dialog --textbox /var/log/aptitude 22 70

Menú: Permite la creación de menús, que consiste en una cadena de caracteres asociado con un elemento -también una cadena de caracteres-, los cuales ambos son mostrados. El usuario selecciona con accesos directos mostrados y luego pulsa Enter. La selección se dirige a la salida estándar. El tercer parámetro es la cantidad de elementos mostrados a la vez en un menú, pudiendo navegar hacia más elementos si estos no están visibles.
ALTOITEMSMENU=2
dialog --title  "$TITULO" --menu "$MENSAJE" "$ALTO" "$ANCHO" "$ALTOITEMSMENU" 1 Rojo 2 Azul 3 Verde

Lista de selección independientes: se presenta distintas opciones independientes, las cuales se pueden activar o desactivar con la tecla espacio. Semejante al menú, sólo que cada elemento tiene tres parámetros iniciales: identificador, elemento y estado predeterminado (on u off). Con --nocancel se elimina el botón de cancelar.
dialog --checklist "Seleccione Programas:" "$ALTO" "$ANCHO" "$ALTOITEMSMENU" \
      1 Openoffice.org on \
      2 Empathy on \
      3 "aMSN mensajería con muñequitos" off


Lista de selección exclusiva: se presenta distintas opciones, pero solo se puede seleccionar una de ellas. Funciona similar a la lista de selección independiente, usando el tercer elemento para marcar el predeterminado. Las selecciones obtenidas se pueden dirigir, vía error estándar, a un archivo (2>archivo).
dialog --backtitle "Selección de color" \
--radiolist "Eliga su prefrido:" 10 40 4 \
      1 Verde off \
      2 Amarillo on \
      3 Azul off \
      4 Naranja off

Ejemplos en forma de guión:
#!/bin/bash
#I
dialog --title  "Mensaje" --msgbox "La prueba" 10 20

#II
TITULO="Mensaje"
ALTO="10"
ANCHO="30"
MENSAJE="La Prueba"
TIEMPO="1"
TITULOTRASERO="Pruebas de Dialog"
#Archivo para contener salida de error:
TEMPORAL="/tmp/dialog$(date | awk '{ print $2$3$6 }')"

dialog --title  "$TITULO" --msgbox "$MENSAJE" "$ALTO" "$ANCHO"

#III
dialog --title "Message" --yesno "¿Te\n diviertes?" 6 25

dialog --title  "$TITULO" --infobox "$MENSAJE" "$ALTO" "$ANCHO" ; sleep "$TIEMPO"


dialog --inputbox "Indique su nombre:" 8 40 2>$TEMPORAL
VARIABLE=$(cat $TEMPORAL)
dialog --title "Su Nombre" --msgbox "$VARIABLE" "$ALTO" "$ANCHO"

dialog --textbox /var/log/aptitude

ALTOITEMSMENU=2
dialog --title  "$TITULO" --menu "$MENSAJE" "$ALTO" "$ANCHO" "$ALTOITEMSMENU" 1 Rojo 2 Azul 3 Verde

dialog --checklist "Seleccione Programas:" "$ALTO" "$ANCHO" "$ALTOITEMSMENU" \
      1 Openoffice.org on \
      2 Empathy on \
      3 "aMSN mensajería con muñequitos" off


dialog --title  "$TITULO" --backtitle "$TITULOTRASERO" --radiolist "Elija su color preferido:" "$ALTO" "$ANCHO" 4 1 Verde off 2 Amarillo on 3 Azul off 4 Naranja off
 if [ "$?" != "0" ]; then dialog --title  "$TITULO" --backtitle "$TITULOTRASERO" --msgbox "Ud. no pulsó Cancelar" "$ALTO" "$ANCHO"
 fi
 

 Fuentes:
http://www.linuxjournal.com/article/2807
http://ayaz.wordpress.com
http://linux.die.net/man/1/dialog
http://www.linuxjournal.com/article/2460

No hay comentarios: