El Manual de BASH Scripting Básico para Principiantes/El clon (Case-Esac)

De Wikilibros, la colección de libros de texto de contenido libre.
← El básico (If-Then) El clon (Case-Esac) El clásico (For) →
El Manual de BASH Scripting Básico para Principiantes


Sentencia Case-Esac[editar]

El conjunto de palabras Case ... Esac conforman un selector en función de un resultado.

Ejemplo[editar]

Por ejemplo, supongamos que tenemos una variable X la cual puede tomar un valor numérico leído desde teclado:

  read x
  case $x in
     1)
        echo "uno"
     ;;
     2)
        echo "dos"
     ;;
     *)
        echo "no sé qué numero es"
     ;;
  esac

Explicación del código[editar]

read espera un valor desde el teclado para X , 'ingrese un numero'; Case llama la variable y según su valor muestra un mensaje en pantalla, si el numero es distinto a 1 o 2 se ejecuta la linea '*' y esac es la instrucción de cierre.

Esto también es aplicable a variables alfanuméricas, aquí también presten atención que es sensible a mayúsculas y minúsculas.

Por ejemplo:[editar]

  read opcion
  case $opcion in
      s|S) 
         echo "pulso la opción SI"
      ;;
      n|N)
         echo "pulso la opción NO"
      ;;
      *)
         echo "desconozco esa opción"
      ;;
  esac

Explicación del ejemplo[editar]

En este caso el programa reconoce las mayúsculas y las minúsculas, el (símbolo barra vertical) '|' es una instrucción 'o' (OR) en donde las opciones son 's' ó 'S', lo que determinan si el usuario tecleó alguna de estas letras se ejecuta tal tarea, en este caso imprime en la pantalla la leyenda pulso la opción SI.

Este mecanismo es muy útil a la hora de toma de decisiones, por menú o de forma autónoma para tener un medio de control.

Consejos útiles[editar]

Un par de tips para esto:

  • Las estructura case-esac puede estar contenida dentro de otro, por ejemplo de un if ó un while.
  • En estos ejemplos la ejecución de tarea es de una línea pero se pueden poner varias lineas por tareas de decisión o bien llamar un script externo.