Today is Sunday, 5th February 2012

Posts Tagged ‘shell script’

Shell script: expect o autoexpect, esa es la cuestión

Bien es sabido por muchos de las virtudes de la herramienta expect para desarrollar shell scripts automatizados a través del método:

1.) stdin
2.) ¿qué stdout/stderr espero?
3.) stdin
4.) ¿qué stdout/stderr espero?
…..

Por ser breve, es un lenguaje pensado casi exclusivamente para convertir sesiones interactivas de ftp, telnet, ssh, etc… en sesiones automáticas. Casi más sorprendente, es que añadiendo el módulo TK, podremos automatizar sesiones de X11, wow!!!!

Pero este artículo no quiere ser un tutorial de expect, ni tampoco una presentación formal, su web es bastante buena para intentar hacer una copia ;) . Pretendo enseñar, y en otros casos recordar, que no es necesario saber nada, o casi nada de expect para poder utilizarlo, gracias a autoexpect.

Este script nos abrirá una sesión de comando “script”, y grabará toda la sesión interactiva. Una vez que salgamos de la sesión con “exit”, creará un script de expect que podremos ejecutar directamente. wow!!!!

Cosas a tener en cuenta:

- Cualquier salida por pantalla variable, tipo fecha, hora, y cosas así, nos obligará a editar el script expect final, y poner expresiones regulares. Genial!
- Seguro que hay más, espero esos comentarios ;)

En la siguiente página incluyo el código del autoexpect, no como referencia, sino como idea general. La recomendación que os hago es visitar la web oficial de expect, descargar las últimas fuentes de expect, descomprimir, y buscar en el directorio example/ el script autoexpect. En la versión que he descargado yo, he tenido que modificarlo para poner la ruta absoluta de expect en la primera línea:



Script: consulta de saldo de tarjeta restaurant v.2.0

Debido a algunos cambios que han realizado en la web de Ticket Restaurant, he tenido que modificar el script original para adaptarlo. Recordad el artículo anterior con el script y la explicación. Resumen de modificaciones que han realizado:

- Todas las urls ahora tienen como base www.ticketrestaurantcard.es

- Se ha incluído un nuevo campo en el envío del POST: swlang

Como véis, son cambios normales y poco entrenidos; estaba deseando que me obligaran a cambiar la expresión regular, lástima!

¿Será un buen día para empezar con el laboratorio de expresiones regulares?

http://www.tux-es.com/project1/2009/11/script-consulta-de-saldo-de-tarjeta-restaurant/

Como siempre, si alguien tiene alguna pregunta sobre el script, os invito a comentarlo.

#!/bin/bash

export AGENT="Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.8) Gecko/20051111 Firefox/1.5"

export LOGINURL="https://www.ticketrestaurantcard.es/TRC/index.html"
export POSTLOGIN="https://www.ticketrestaurantcard.es/TRC/checkUserLogin.php"
export POSTDATA="swlang=es&user=usuario&passwd=password&type=trc"

curl -s -A '${AGENT}' -d "${POSTDATA}" -c ticketrestaurant.cookie -o login1.out -e ${LOGINURL} ${POSTLOGIN}
curl -s -A '${AGENT}' -b ticketrestaurant.cookie -o login2.out -e ${POSTLOGIN} https://www.ticketrestaurantcard.es/TRC/home.html
curl -s -A '${AGENT}' -b ticketrestaurant.cookie -o login3.out -e https://www.ticketrestaurantcard.es/TRC/home.html https://www.ticketrestaurantcard.es/TRC/consulta_tarjeta.html
curl -s -A '${AGENT}' -b ticketrestaurant.cookie -o login4.out -e https://www.ticketrestaurantcard.es/TRC/consulta_tarjeta.html https://www.ticketrestaurantcard.es/TRC/logout.html
SALDO=`cat login3.out | sed -n '/SALDO/p' | sed 's/.* \([0-9]*,[0-9]*\) .*/\1/g'`
clear
MAIL_BODY=`echo "Su saldo Sr. Señor: ${SALDO} euros" > /tmp/mail.body`
mail email@domain.com -s "Saldo Tarjeta Restaurant: ${SALDO} euros" < /dev/null


Script: consulta de saldo de tarjeta restaurant

Hoy inaguramos la sección de Laboratorio incluyendo el primer script de automatización de “tareas web”.

Este script consulta una página de Gestión de Tarjeta Restaurant, y consulta el saldo para enviar un email al usuario elegido. Parece un simpleza, pero podemos aprender varias cosas dado que es una buena plantilla para hacer nuestros scripts propios.

#!/bin/bash

export AGENT="Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.8) Gecko/20051111 Firefox/1.5"

export LOGINURL="https://ticketrestaurant.geanetondemand.com/TRC/index.html"
export POSTLOGIN="https://ticketrestaurant.geanetondemand.com/TRC/checkUserLogin.php"
export POSTDATA="user=usuario&passwd=password&type=trc"

curl -s -A '${AGENT}' -d "${POSTDATA}" -c ticketrestaurant.cookie -o login1.out -e ${LOGINURL} ${POSTLOGIN}
curl -s -A '${AGENT}' -b ticketrestaurant.cookie -o login2.out -e ${POSTLOGIN} https://ticketrestaurant.geanetondemand.com/TRC/home.html
curl -s -A '${AGENT}' -b ticketrestaurant.cookie -o login3.out -e https://ticketrestaurant.geanetondemand.com/TRC/home.html https://ticketrestaurant.geanetondemand.com/TRC/consulta_tarjeta.html
curl -s -A '${AGENT}' -b ticketrestaurant.cookie -o login4.out -e https://ticketrestaurant.geanetondemand.com/TRC/consulta_tarjeta.html https://ticketrestaurant.geanetondemand.com/TRC/logout.html
SALDO=`cat login3.out | sed -n '/SALDO/p' | sed 's/.* \([0-9]*,[0-9]*\) .*/\1/g'`
clear
MAIL_BODY=`echo "Su saldo Sr. Señor: ${SALDO} euros" > /tmp/mail.body`
mail email@domain.com -s "Saldo Tarjeta Restaurant: ${SALDO} euros" < /dev/null

Sigue leyendo para conocer la explicación



Shell script: leer cada línea de un fichero

#!/bin/bash

exec 0< fichero1
while read -r LINEA
do
echo $LINEA
done


Top