Bash Scripting 2° Parte
En la publicación anterior vimos una introducción a las estructuras de control, dijimos que estas permitían alterar el flujo secuencial del código permitiéndonos así, iterar o decidir que hacer con un determinado trozo de código.
Me parece importante nombrar una estructura mas que a veces nos puede ser de bastante utilidad. Tomemos en cuenta un ejemplo “tonto” pero que sirva para aclararnos las ideas, supongamos que recibimos un numero DE UNA CIFRA como parámetro y tenemos que convertirlo a un numero romano.
Por ejemplo, recibimos el numero 4 y el script debe imprimir en pantalla el valor IV.
Con las estructuras antes vistas podríamos usar el if para preguntar por el valor del parámetro:
#!/bin/bash
numero=$1 #Asignamos el parámetro recibido a la variable numero.
if [ $numero -eq 1 ]; then
echo “I”
else
if [ $numero -eq 2 ]; then
echo “II”
else
if [ $numero -eq 3 ]; then
echo “III”
else
if [ $numero -eq 4 ]; then
echo “IV”
else
if [ $numero -eq 5 ]; then
echo “V”
else
if [ $numero -eq 6 ]; then
echo “VI”
else
if [ $numero -eq 7 ]; then
echo “VII”
else
if [ $numero -eq 8 ]; then
echo “VIII”
else
if [ $numero -eq 9 ]; then
echo “IX”
fi
fi
fi
fi
fi
fi
fi
fi
fi
Como podrán darse cuenta, ademas de ser bastante feo de leer, este código es muy ineficiente ya que todo el tiempo tenemos que estar preguntando por el valor del numero hasta que encontramos su correspondiente.
En este caso podríamos usar el case, con esta estructura preguntamos solamente una vez por el valor de numero y “delegamos la responsabilidad” al case para que este decida que acción tomar. Así, el código quedaría:
#!/bin/bash
numero=$1
case $numero in
1)
echo "I"
;;
2)
echo "II"
;;
3)
echo "III"
;;
4)
echo "IV"
;;
5)
echo "V"
;;
6)
echo "VI"
;;
7)
echo "VII"
;;
8 )
echo "VIII"
;;
9)
echo "IX"
;;
esac
Esto es mucho mas fácil de leer y hasta mas simple de escribir, podemos ver que de esta forma preguntamos una sola vez por el valor de numero y dependiendo del resultado se imprime su correspondiente, por ejemplo, llega como parámetro el 4, se pregunta por el valor de numero y directamente salta al comando “echo “IV”" dado que es el correspondiente a 4. La sintaxis es muy simple:
case $VARIABLE in
#si el valor de variable es igual a “opcion1″ entonces se ejecutaran los #comandos comprendidos entre opcion1 ) y ;;
opcion1 )
comandos_para_la_opcion1
;;
#si el valor de variable es igual a “opcion2″ entonces se ejecutaran los #comandos comprendidos entre opcion2 ) y ;;
opcion2 )
comandos_para_la_opcion2
;;
#si el valor de variable es igual a “opcion3″ entonces se ejecutaran los #comandos comprendidos entre opcion3 ) y ;;
opcion3 )
comandos_para_la_opcion3
;;
esac
Como una opinión personal me parece mas simple resolver el problema con un array (estructura que veremos mas adelante) ya que se simplifica aun mas, igualmente el ejemplo sirve a modo demostrativo porque cumple lo planteado de una manera bastante simple y eficiente.
Hasta aquí hemos llegado a ver las estructuras de control mas usadas en la programación en bash (y en cualquier otro lenguaje), con esto ya estamos preparados para hacer scripts mas complejos. Este tema lo voy a abordar en la próxima publicación haciendo una introducción al trabajo con archivos y demás.
Nuevamente repito, su consulta no molesta :) así que cualquier comentario (insulto, denuncia, etc xD) sera bien recibido.
Ejemplos:
Convertir a Romanos usando case
Completa esta lectura con:
Si te gustó este post, por favor considera dejar un comentario o suscribirte al feed y obtener artículos futuros en tu lector de feeds.










[...]Chequeando mis feeds he encontrado que Eral de La Consola nos esta dando unas pequeñas clases de Shell Scripts y sus principales aspectos como estructuras de control y declaración de variables[...]