¡Bash es una pasada! Es capaz de dejarnos hacer maravillas en poco tiempo y de automatizar lo inautomatizable, en este caso, traigo un ejemplo más, de cómo un código muy corto es capaz de presentarnos los resultados de una consulta SELECT de mysql:
Los datos de prueba provienen de uno de mis proyectos: Málaga Bloguea donde muestro las últimas novedades de blogs de Málaga.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #!/bin/bash OLDIFS=IFS MYSQL_USER=#Usuario Mysql MYSQL_PASSWORD=#Password Mysql MYSQL_HOST="localhost" # IFS personalizado, para poder delimitar los campos correctamente IFS="`echo -e "\t\n\r\f"`" # Declaramos la variable como array, no es estrictamente necesario, pero sí un poco más correcto declare -a IPS # Generamos la consulta (Si vamos a utilizar un juego de caracteres determinado, como # UTF8, debemos especificar primero para evitar sorpresas. SQL="SET CHARACTER SET utf8; SELECT \`titulo\`, \`directlink\`, \`nombre\` AS \`nombreblog\` FROM malagabloguea.blogentry LEFT JOIN malagabloguea.blogs ON blogs.id=blogentry.blogid ORDER BY blogentry.ctime DESC LIMIT 5" # Generamos la consulta, es importante obviar los nombres de columna IPS=(`echo "$SQL" | mysql -u $MYSQL_USER --password=$MYSQL_PASSWORD -h $MYSQL_HOST --skip-column-names`) # La consulta obtendrá todos los datos en un vector, por lo que sabiendo el número de columnas que hay en la tabla, podremos calcular las filas fácilmente # DEBEMOS especificar cuál es el ancho de cada fila COLUMNS=3 # Con el número de columnas, sacaremos cuántas filas hay ROWS=$[${#IPS[@]} / $COLUMNS] # Ponemos ciertos datos en pantalla echo "TOTAL DE ELEMENTOS: "${#IPS[@]} echo "COLUMNAS: "$COLUMNS echo "FILAS: "$ROWS # Recorremos el array para verlo visualmente todo for (( i=0; i<$ROWS; i++ )); do for (( j=0; j<$COLUMNS; j++ )); do # El número del elemento (ELEM), podemos calcularlo a cada elemento, o ir incrementando en uno el valor de una variable # cada vez que leamos un elemento, aunque esta forma me parece más comprensible y escalable. ELEM=$[$i * $COLUMNS + $j] # Ponemos en pantalla el elemento, sin saltar de línea, entrecomillándolo, para que veamos claramente que está delimitado echo -n "${IPS[$ELEM]}" - done # Cuando hemos dibujado una fila de la tabla, saltamos de línea dos veces echo -e "\n\n" done # Reestablecemos el valor del $IFS a como estaba antes. IFS=OLDIFS |
El resultado de este código es:
«DEMASIADAS NOCHES SIN TI» -«http://megasalva.blogspot.com/2012/02/demasiadas-noches-sin-ti.html» -«Miles de piedras pequeñas» –
«Colllor, descubre las variables de cualquier color» -«http://checkapps.blogspot.com/2012/02/colllor-descubre-las-variables-de.html» -«CheckApps» –
«Hay serios problemas con ‘The Last Guardian’» -«http://feedproxy.google.com/~r/ElPixelIlustre/~3/BYugmHpDOuo/hay-serios-problemas-con-the-last-guardian.html» -«El Pixel Ilustre» –
«Rebuild, estrategia por turnos y zombis» -«http://feedproxy.google.com/~r/ElPixelIlustre/~3/oN0SmK6PHRI/rebuild-estrategia-por-turnos-y-zombis.html» -«El Pixel Ilustre» –
«Introducción al 3d con Blender 2.5 Parte II» -«https://taito3d.wordpress.com/2011/12/09/introduccion-al-3d-con-blender-2-5-parte-ii-2/» -«taito3dtutorial» –
Este es sólo un pequeño ejemplo, pero podemos extenderlo mucho más allá.
Foto: NightRStar (Flickr) CC-by a 20/08/2012
Pingback: Bitacoras.com /
Pingback: BlogESfera.com /
Pingback: Hacer funcionar tu viejo ordenador de router, y filtrar por dirección MAC | Poesía Binaria /