Today is Miércoles, 10th Marzo 2010

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

Tabla Subnetting

Simplemente me parecía interesante.

Fuente original: http://www.iniqua.com/2010/02/01/subnetting-de-cabeza-en-un-segundo/

Tabla de Subnetting

Breve opinión acerca de Software Libre, no Software Gratis

En mis años de experiencia trabajando con Software Libre, me he encontrado con muchas situaciones en las que personas con cierto criterio, no saben distinguir el matiz de free software, y no se molestan en entenderlo. Empleando su mal uso en circunstancias donde técnicamente hay que ser muy correcto.

Por ser un poco sarcástico y práctico con el ejemplo, siempre digo que hay personas que piensan que el software libre es aquel que te bajas de las redes P2P con el keygen incluído ;) .

Si acudimos a las definiciones de free en Wordreference, comprobamos que casi todas ellas están explicadas en un contexto. Puede significar gratis, libre, etc…pero de Free Software como concepto, siempre ha sido entendido como Software Libre. De hecho si nos remontamos al pasado, linux como kernel, GNU como proyecto, y FSF como fundación, veremos que Linux fue incluído en el proyecto GNU, y acogido como software por la FSF.org, se creó la licencia GPL.

Siempre intento explicar, de forma más breve ;) , todo estos conceptos a las personas que confunden software libre con gratuito, incluso a aquellos que destacan por encima de todo que es gratis, cuando debieran primar otras virtudes antes que  esta. Hoy me he encontrado otro ejemplo, leyendo Barrapunto, un artículo donde se comentaba la entrevista de la Directora de Microsoft España, María Garaña, en RNE1. En una de las partes dijo:

“Si lo del Software Libre se entiende como Software Gratuito, creo que en Microsoft y en otras compañías, se ofrece software que se puede utilizar de manera gratuita”

Es un ejemplo más que añado a mi experiencia.

¿alguna vez tu madre te escribió algo así?

CARTA DE UNA MADRE A SU HIJO INFORMATICO

Querido hijo:A la vista está que desde que comenzaste tus estudios de Informática, tu nivel de comunicabilidad con el resto de tu familia ha ido en receso, al igual que tu capacidad para mantener un mínimo orden en tu mesa de trabajo y resto de tu habitación. Es por ello que he decidido tomar cartas en el asunto y ponértelo de manifiesto en los mismos términos que empleas a diario para dirigirte a nosotros, tu familia:

sigue leyendo …

VMware Server 2.x – CLI

Hoy escribiré sobre el modo línea de comandos de VMware Server 2.x.

Antecedentes: en las versiones anteriores de VMware Server 1.x, existía una consola standalone con la que gestionábamos todas las VM’s. En esta nueva versión, 2.x, todo se realiza a través de web.
Para las operaciones automatizadas, de backup, parada y arranque, etc… antes se utilizaba la herramienta vmware-cmd, pero ya no contamos con ella.

De la mano de VMware Server 2.x nace:

# vmrun

Esta herramienta es la que nos permitirá realizar operaciones automatizadas con nuestras máquinas virtuales. Una vez más, recordar que es necesario tener las vmware tools instaladas en las máquinas virtuales, para sacar todo el provecho a vmrun.

Seguid leyendo para encontrar más información.

grep para entornos windows ^^

Cual ha sido mi sorpresa hoy, leyendo un artículo sobre implementación de Bacula Client en entornos Windows, encontré el siguiente comando:

findstr

Leyendo más sobre él, puedo concluir que tiene la apariencia de grep, que ni hablo del sed ;) , pero con menos potencia:

findstr [/b] [/e] [/l] [/r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/offline] [/g:file] [/f:file] [/c:string] [/d:dirlist] [/a:ColorAttribute] [strings] [[Drive:][Path] FileName [...]]

Ey!, que nos deja poner algunas expresiones regulares:

.

Wildcard: any character

*

Repeat: zero or more occurrences of previous character or class

^

Line position: beginning of line

$

Line position: end of line

[class]

Character class: any one character in set

[^class]

Inverse class: any one character not in set

[x-y]

Range: any characters within the specified range

\x

Escape: literal use of metacharacter x

\<xyz

Word position: beginning of word

xyz\>

Word position: end of word

Referencias – http://www.microsoft.com/

Asterisk 1.4.x – Trunk SIP

Lo que me ha llevado a escribir este artículo ha sido la numerosas veces que he buscado información sobre esto. Quizás sea problema de mi forma de buscar, aunque finalmente comprendí que esta tipo de configuraciones se consideran también como “Asterisk as sip client”, pero en cualquier caso con los pedacitos de información que he ido encontrando, quería poner un ejemplo concreto para configurar un TRUNK SIP entre dos Asterisk.

Asterisk PBX

Asterisk PBX

NAT sobre conexiones locales

En ocasiones es útil el NAT ;) . En este caso concreto pondremos una línea de iptables para realizar Source Nat sobre conexiones originadas localmente.

Antes de nada, queremos mostrar la cadena que atraviesa un paquete por un sistema con iptables:

iptables-chain-graph

Es importante destacar las partes donde se toman decisiones de enrutado, sobre todo cuando utilizamos las tablas de mangle y nat.

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


/dev/random

Google

Google
Web Este site

Publicidad

Top