Home > Comandos Avanzados, Linux > Comando case en Linux

Comando case en Linux

October 28th, 2013

Regla mnemotécnica

case: En caso de en ingles in case.

Estructura del Comando Case

El comando case es una forma de ejecución condicional que nos permite ejecutar unos u otros comandos según el valor de una variable. No incluye ninguna funcionalidad nueva que no pueda ser realizada con el uso del comando if, pero en ciertos casos la sintaxis es más sencilla, intuitiva y directa. Con el comando case se lee una variable, si su valor coincide con alguno esperado se ejecutan los comandos asociados a ese valor. La sintaxis es como indicamos a continuación:

case $variable in

valor-1) 
    comandos
;;
valor-2) 
    comandos
;;
...
*)       
    comandos
esac

donde $varible es la variable que leemos, si tiene el valor-1 ejecuta los comandos que se encuentran a continuación hasta que se encuentran ";;" que indica el fin de los comandos asociados a ese valor de la variable. Se pueden definir cuantos posibilidades sean necesarias y como última opción podemos añadir el comodín "*)" y si la ejecución llega hasta este punto ejecutará los comandos para este caso. Si no existe "*)" y la variable no toma ninguno de los valores predefinidos evidentemente no se ejecuta nada. Veamos un ejemplo:

nombre=gabriel

case $nombre in
txomin)    echo "No soy Gabriel"
           echo "Soy Txomin"
;;
gabriel)   echo "Soy Gabriel"
;;
*)         echo "No soy Txomin"
           echo "Ni tampoco soy Gabriel"
esac

Evidentemente la ejecución de este script dará como salida "Soy Gabriel" y es fácil ver que será lo que hará dependiendo del valor que le asignemos a la variable $nombre. También podemos usar el comando booleano “or”  (o) con el símbolo “|” para indicar varios posibles valores asociados a los mismos comandos.

nombre=gabriel

case $nombre in
txomin|gabriel)
           echo "Soy Gabriel o Txomin"
;;
*)         echo "No soy Txomin"
           echo "Ni tampoco soy Gabriel"
esac

Comandos Avanzados, Linux

  1. No comments yet.
  1. No trackbacks yet.