¡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 /
Your blog provided us with valuable information. I am looking forward to read more blog posts from here keep it up!!And Just Like That Carrie Bradshaw Green Jacket
Excellent article. The writing style which you have used in this article is very good and it made the article of better quality.
Freddie Mercury Yellow Jacket