Control de Flujo: La sentencia case-esac

Aunque el elif resulta muy útil para resolver una gran cantidad de problemas y situaciones, la sentencia case-esac representa una mejor opción cuando se quiere manipular una gran cantidad de opciones ya que permite ver de forma más clara todas las opciones, además que es ideal para controlar la entrada de argumentos y opciones en los scripts de bash.



La sintaxis es la siguiente:

case expresion in
  caso_1)
    comandos
  ;;
  caso_2)
    comandos
  ;;
#...
  *)
    comandos
  ;;
esac

si la variable expresion se encuentra en algunos de los casos propuestos ejecuta los comandos correspondientes.



Elementos de la sentencia case-esac

Comenzamos con case variable in

Paréntesis de cierre ) después de cada caso (condición).

Doble punto y coma ;; delimita la lista de comandos que serán ejecutados cuando se cumpla el caso (condición).

Cerrar la sentencia case con esac.

Lo entederemos mejor con un ejemplo, imaginemos que queremos hacer un pequeño escript que nos pregunte por nuestra edad y le demos una serie de respuestas diferentes al usuario en función del numero introducido:

echo "Cuantos años tengo"
read edad
case $edad in
  37)
    echo "¡Correcto!"
  ;;
  *)
    echo "¡Nop!"
  ;;
esac

Vemos como encapsulamos todos las posibles opciones de respuesta en el segundo caso que contiene un *. Asi de forma rápida y sencilla podemos controlar todas las opciones que podrían darse al introducir la edad.

Aqui otro ejemplo con más opciones

echo "Escribe tu nombre sin usar mayusculas"
read nombre
case $nombre in
  a*)
    echo "tu nombre empieza con a"
  ;;
  c*t)
    echo "tu nombre empieza con c y termina con t"
  ;;
  *se)
    echo "tu nombre termina con la cadena se"
  ;;
  *)
    echo "no soy capaz de reconocer tu nombre"
  ;;
esac

veamos como funciona en terminal:

-$  bash case_esac.sh
Escribe tu nombre sin usar mayusculas
antonio
tu nombre empieza con a