06. Bash: control de flujo (case)

Publicado por

En la nota anterior expliqué el uso de las condicionales en Bash, en esta ocasión les platicaré el uso del caseAunque el elifresulta muy útil para resolver una gran cantidad de problemas y situaciones, el caserepresenta 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.

Diagrama case

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.

case-bash

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.

case-metacaracteres-bash

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.

7 comments

  1. Una consulta, estoy haciendo un script de administración de usuarios y cuando llega el caso 4 según cierta elección al usuario al puede salir un mensaje de error. Lo que quiero saber yo es si hay una manera de regresar y pedir nuevamente el caso 4, porque lo que puedo hacer ahora es regresar al menú de inicio. Muchas gracias.
    P.D. No lo adjunto porque es demasiado largo.

    1. Tienes que meter el proceso en un while, para que, si cierta variable es distinta de un valor esperado, regrese al tope del while y vuelva a pedir el valor.

  2. No tengo demasiada experiencia en scripts, pero por lo que yo llevo hecho, si en esa opción 4 pones un bucle do while del que solo saldrás cuanto den una opción de tu consideres correcta e indicaras que se salga, sino se estará ejecutando repetidamente ese bucle, son lo que volverá a pedir la elección de nuevo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *