Una vez más bienvenidos a esta nueva lección (# 8) del Curso (Tutorial) sobre Shell Scripting”. En las anteriores 7 lecciones pudimos realizar y/o aprender sobre como crear ciertos módulos (secciones) de códigos con funcionalidades especificas mediante Shell Scripting usando Bash Shell como interprete de ejecución. Estos módulos hasta ahora son:
Para ir a la entrada anterior (lección 7) presione el siguiente enlace:
En esta octava (8) parte, nos concentraremos en la construcción de varios módulos, siendo estos los siguientes:
EL MODULO DE CONFIGURACIÓN DE PROXY:
# MODULO DE CONFIGURACIÓN DE PROXY
read -p "En caso de requerir configurar un Proxy en su Terminal, introduzca la dirección_ip:puerto necesaria, en caso contrario solo presione la tecla ENTER: " IP_PTO_PROXY
# Nota: Indicar dirección_ip: puerto solo en caso de ser necesario activar debido
# a proxy interno no transparente para la terminal dentro de la red de trabajo
# donde se ejecute.
echo -e '\a'
export http_proxy=$IP_PTO_PROXY
#export no_proxy="127.0.0.1, localhost, 192.168.0.0/22, mi_institucion.gob.ve:8080"
sleep 3
clear
read -p "SI DESEA CANCELAR PRESIONE CUALQUIERA DE LOS SIGUIENTES CARACTERES: "s" "S" "y" "Y". DE LO CONTRARIO PRESIONE CUALQUIER OTRA TECLA! : " op
if [[ $op == "y" || $op == "Y" || $op == "s" || $op == "S" ]];
then
sleep 3 ; clear ; exit 0
else
sleep 3 ; clear ; read -p "EL PROGRAMA CONTINUARA, OPRIMA CUALQUIER TECLA PARA CONTINUAR..." && sleep 3 ; clear
fi
La función de este modulo es indicarle al programa que la consola para lograr realizar tareas que requieran conectividad a internet requiere un proxy. Si usted no indica nada (Tecla Enter sin colocar ninguna IP) el programa asumirá que no requiere proxy, en caso contrario usted debe indicarle una IP:PUERTO, para que el mismo configure un proxy temporal de salida y realizar la conectividad.
EL MODULO DE BIENVENIDA
# MODULO DE BIENVENIDA
play /usr/share/sounds/startup3.wav 2> /dev/null
echo " BIENVENIDOS AL PROGRAMA "
sleep 3
clear
dialog --infobox "\n \n \nGRACIAS POR USAR ESTE SCRIPT..." 10 80 ; sleep 3
DIALOG=${DIALOG=dialog}
COUNT=10
(
while test $COUNT != 110
do
echo $COUNT
echo "XXX"
echo "ESTIMADO USUARIO, BIENVENIDO AL SCRIPT..."
echo "GRACIAS POR UTILIZARME..."
echo "ESPERE UNOS SEGUNDOS MIENTRAS ME INICIALIZO... ($COUNT %)"
echo "XXX"
COUNT=`expr $COUNT + 10`
sleep 1
done
) |
$DIALOG --title "LPI - SB" --gauge "INICIALIZANDO EL SCRIPT" 10 80 0
clear
echo " SCRIPT DE TRABAJO EN EJECUCIÓN "
echo ""
sleep 3
clear
La función de este modulo es mostrar un Banner de Bienvenida al usuario diseñado manualmente con caracteres alfanuméricos y no alfanuméricos. Luego una ventana de mensaje informativo por terminal con dialog y por ultimo una barra de progreso para controlar el siguiente paso al próximo módulo.
EL MODULO DE SELECCIÓN DE INTERFACE DE USUARIO
# MODULO DE SELECCIÓN DE INTERFACE DE USUARIO
DIALOG_CANCEL=1
DIALOG_ESC=255
HEIGHT=0
WIDTH=0
display_result() {
dialog --title "$1" \
--no-collapse \
--msgbox "$result" 0 0
}
while true; do
exec 3>&1
selection=$(dialog \
--backtitle "Script en ejecución" \
--title "Menu" \
--clear \
--cancel-label "Exit" \
--menu "Seleccione una (1) opción, por favor:" $HEIGHT $WIDTH 4 \
"1" "Usar interfaz de usuario (GUI) por Terminal" \
"2" "Usar interfaz de usuario (GUI) por Escritorio" \
"3" "Cerrar la sesión del Script" \
2>&1 1>&3)
exit_status=$?
exec 3>&-
case $exit_status in
$DIALOG_CANCEL)
clear
echo "Sesión del Script cancelada."
exit
;;
$DIALOG_ESC)
clear
echo "Sesión del Script abortada." >&2
exit 1
;;
esac
case $selection in
0 )
clear
echo "Programa Terminado."
;;
1 )
result=$(echo "Usuario $USERNAME, usted ha seleccionado la interfaz de usuario (GUI) por Terminal"; echo $FECHA_SISTEMA_N / $HORA_SISTEMA)
display_result "Script de Trabajo"
USER_INTERFACE=T ; break
;;
2 )
result=$(echo "Usuario $USERNAME, usted ha seleccionado la interfaz de usuario (GUI) por escritorio"; echo $FECHA_SISTEMA_N / $HORA_SISTEMA)
display_result "Script de Trabajo"
USER_INTERFACE=E ; break
;;
3 )
result=$(echo "Usuario $USERNAME, el SCRIPT ha seleccionado la interfaz de usuario (GUI) por Terminal por defecto"; echo $FECHA_SISTEMA_N / $HORA_SISTEMA)
display_result "Script de trabajo"
USER_INTERFACE=T ; break
;;
esac
done
La función de este modulo es crear una ventana del tipo menú que permita escoger una opción con el uso tanto del teclado como el mouse. Cada opción puede ejecutar una orden de comando, un modulo, una función u otro script. En este caso en particular, se uso para almacenar un valor en una variable que luego permitirá decidir una orden según su contenido.
EL MODULO DE SELECCIÓN Y EJECUCIÓN DE MÓDULOS ADICIONALES
# MODULO DE SELECCIÓN Y EJECUCIÓN DE MÓDULOS ADICIONALES
if [[ "$USER_INTERFACE" == "T" ]]; then
bash $UBICACION/lpi_sb8_gui_terminal.sh
sleep 3
else
bash $UBICACION/lpi_sb8_acond_audiovisual_g_2016.sh
bash $UBICACION/lpi_sb8_act_mtto_g_2016.sh
fi
La función de este modulo es ejecutar una opción predefinida en función de un valor almacenado previamente en una variable. En este caso, esa variable dispararía una selección entre continuar realizando actividades solo vía consola con comandos e interfaces gráficas con dialog ó vía interfaces gráficas para el Entorno de Escritorio con Zenity y Gxmessage.
EL MODULO DE DESPEDIDA
# MODULO DE DESPEDIDA
# Sección que muestra un mensaje de despedida al usuario
echo -e '\a'
echo ''
echo ''
echo '#--------------------------------------------------------#'
echo '# ESPERE UNOS SEGUNDOS MIENTRAS SE CIERRAN TODOS LOS #'
echo '# PROCESOS ABIERTOS DEL SCRIPT #'
echo '#--------------------------------------------------------#'
echo ''
echo ''
sleep 5
clear
# Sección que instala los paquetes bases del Script
echo -e '\a'
echo ''
echo ''
echo '#--------------------------------------------------------#'
echo '# MUCHAS GRACIAS POR USAR EL SCRIPT #'
echo '# #'
echo '# EL PROGRAMA HA CULMINADO Y SE CERRARÁ INMEDIATAMENTE #'
echo '# ESTIMADO USUARIO #'
echo '#--------------------------------------------------------#'
echo ''
echo ''
sleep 3
clear
wget -o /dev/null --user-agent="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36" -O "/tmp/audio.mp3" "https://translate.google.co.ve/translate_tts?ie=UTF-8&q=MUCHAS%20GRACIAS%20POR%20USAR%20EL%20LINUX%20POST%20INSTALL%20-%20SCRIPT%20BICENTENARIO%2C%20EL%20PROGRAMA%20HA%20FINALIZADO%20Y%20SE%20CERRAR%C3%81%20INMEDIATAMENTE%2C%20ESTIMADO%20USUARIO.&tl=es&total=1&idx=0&textlen=141&tk=899229.758054&client=t&prev=input" ; play -q /tmp/audio.mp3
play /usr/share/sounds/shutdown1.wav 2> /dev/null
rm -f $UBICACION/$FILE_LOCK
setterm --initialize
# MODULO DE DESPEDIDA
La función de este modulo es mostrar un mensaje por consola de despedida y borrar el archivo de ejecución exitosa del mismo.
A continuación un Screencast donde se muestra como se ejecuta estos módulo y los anteriores para que comprueben como funcionan todos los módulos mostrados durante las 8 lecciones anteriores, y certifiquen el poder del Shell Scripting ha un nivel superior:
¿Y porque debemos utilizar interfaces de usuario por consola o entorno gráfico a nuestros Script?
Debemos recordar que las interfaces gráficas de usuario, también conocidas como GUI (Graphical User Interface) son el medio utilizado para representar la información y acciones disponibles en la interfaz inferior, utilizando para ello un conjunto de imágenes y objetos gráficos. Su principal uso, consiste en proporcionar un entorno visual sencillo para permitir la comunicación con el sistema operativo de una máquina o computador.
Habitualmente nosotros realizamos las acciones mediante la interacción directa con los equipo, es decir, tecleando comandos o ejecutando script con el teclado. Y las GUI surgen como una evolución de las línea de comandos de los primeros sistemas operativos y convirtiéndose en la pieza fundamental en un entorno gráfico.
Y en un contexto del proceso de interacción persona-computador, la GUI es el medio tecnológico interactivo que nos posibilita, a través del uso y la contextualización gráfica del lenguaje visual, una interacción amigable con un sistema informático.
Usar interfaces gráficas nos proporcionan ventajas y desventajas, tales como:
Entre las ventajas: Facilitar el manejo de los procedimientos, Visualizar cada comando en pantalla mediante una imagen u objeto, Proporcionar los mecanismos estandarizados de control como ventanas y cuadros de dialogo al usuario, Permitir la interacción al usuario con el sistema de una forma mas fácil.
Entre las desventajas: Se utiliza más recursos del sistema operativo, la complejidad, el tiempo y el costo de desarrollo de realizar un desarrollo de ese tipo.
Si deseas saber más sobre como realizar nuevas y más bonitas interfaces en Terminal o en el Escritorio te recomiendo aprender sobre algunos comandos que se usan para construir ventanas de diálogo con capacidad de recibir o dar información procesable con scripts en bash, tales como:
Dialog: En el Manual de Dialog nos da las diferentes opciones que tiene.
Gxmessage: En el Manual de Gxmessage nos da las diferentes opciones que tiene.
Zenity: En el Manual de Zenity nos da las diferentes opciones que tiene.
Y si deseas darle un toque aún mas especial e interactivo a tus Script (Programas) ya sean con Bash Shell u otro Shell te recomiendo estos otros programas que bien usados pueden ayudarte ha crear verdaderas maravillas sin ser muy diestro en las lides del Shell Scripting. Entre estos programas tenemos a:
- notify-send: Comando muy útil para realizar notificaciones para eventos tales como avisar cuando llega un correo, se pone en linea un contacto y realizar recordatorios de varias tareas.
- tput: Comando que se usa entre muchas cosas para posicionar el cursor en la pantalla, borrar datos de la pantalla, saber la cantidad de líneas y columnas de la pantalla, posicionar correctamente un campo, borrar un campo cuya entrada se detectó como error. En fin, casi toda la parametrización de la pantalla es hecha por este comando.
- setleds: Comando que permite controlar las teclas de activación y desactivación de las letras Mayúsculas / Minúsculas, el Teclado numérico y de desplazamiento individualmente por cada consola y escritorio.
Bueno, hasta aquí esta serie!