En la nota anterior expliqué el uso de las condicionales en Bash, en esta ocasión les platicaré el uso del case
. Aunque el elif
resulta muy útil para resolver una gran cantidad de problemas y situaciones, el case
representa una mejor opción ya que permite manipular y ver de forma más clara todas las opciones.
La sintaxis es la siguiente:
case expresion in
caso1)
comandos
;;
caso2)
comandos
;;
#...
*)
comandos
;;
esac
Esta estructura permite controlar qué lista de comandos se ejecutarán, de acuerdo a si se cumplen las condiciones o no.
Ejemplo:
#!/bin/bash
#Control de flujo: case
echo "Adivina mi edad"
read edad
case $edad in
30)
echo "¡Correcto!"
;;
*)
echo "¡Incorrecto!"
;;
esac
En este script hay dos posibles casos, el primero es cuando el valor es 30 entonces imprime “¡Correcto!” y el segundo caso que contiene un [ se usa para indicar todas las cadenas que no cumplen con las características de los casos anteriores.
Ejemplo:
#!/bin/bash
#Control de flujo: case
echo "Escribe una frase"
read frase
case $frase in
a*)
echo "La frase empieza con a"
;;
c*t)
echo "La frase empieza con c y termina con t"
;;
*com)
echo "La frase termina con la cadena com"
;;
*)
echo "La frase no cumple con ninguna de las condiciones"
;;
esac
En este script hay cuatro posibles casos; el primero es cuando la cadena inicia con el caracter a, el segundo cuando la cadena comienza con c y termina con t, el tercero cuando la cadena termina con la subcadena com y el último caso que contiene un [ se usa para indicar todas las cadenas que no cumplen con las características de los casos anteriores.

Algunas reglas para tomar en cuenta
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).
Finalmente cerrar la sentencia case
con esac
.
Espero esta información te haya sido de utilidad, como te pudiste dar cuenta el uso del case
es muy simple. En la próxima nota continuaré con el tema Bash: argumentos y funciones desde línea de comandos. Hasta pronto.