Bash Scripting – Declaración de caso

La declaración de caso en scripts bash se usa cuando se debe tomar una decisión contra múltiples opciones. En otras palabras, es útil cuando una expresión tiene la posibilidad de tener múltiples valores. Esta metodología se puede ver como un reemplazo de varias declaraciones if en un script. La declaración de caso tiene una ventaja sobre las declaraciones if porque mejora la legibilidad de nuestro código y son más fáciles de mantener. Las declaraciones de casos en un script Bash son bastante similares a las declaraciones de casos en lenguaje C. Pero a diferencia de C, la instrucción Bash Case deja de continuar la búsqueda tan pronto como se produce la coincidencia. En palabras simples, no requieren ninguna declaración de interrupción que sea obligatoria para usarse en C para dejar de buscar un patrón. 

La sintaxis básica de una declaración de caso se da a continuación,

Sintaxis:

case EXPRESSION in
  Pattern_Case_1)
   STATEMENTS
   ;;
 Pattern_Case_1)
   STATEMENTS
   ;;
 Pattern_Case_N)
   STATEMENTS
   ;;
 *)
   STATEMENTS
   ;;
esac
  • Una declaración de caso comienza con la palabra clave case seguida de una expresión y la palabra clave.
  • Termina con la palabra clave esac .
  • Se pueden utilizar varios casos de patrones separados por | operador.
  • El operador de paréntesis de cierre ‘)’ se utiliza para finalizar la lista de casos de patrones.
  • Un caso de patrón puede contener caracteres especiales.
  • Un caso patrón y su cuerpo se denominan cláusula.
  • El cuerpo del caso del patrón debe ir seguido de ;;.
  • En caso de que una expresión coincida con dos casos de patrones, en tal caso se ejecuta el cuerpo correspondiente al primer caso de patrón coincidente que coincida con la expresión.
  • Al igual que C proporciona una palabra clave predeterminada para la declaración predeterminada, del mismo modo en la declaración del caso Bash, podemos usar el símbolo de asterisco comodín (*) y definir un caso de patrón final para definir el caso predeterminado.
  • En caso de que no coincida ningún patrón, el estado de retorno es cero. De lo contrario, el estado de retorno es el estado de salida del cuerpo ejecutado del caso de patrón coincidente.

Ejemplo 1: generar una descripción para cada opción

En este ejemplo, un script permite al usuario seleccionar un departamento y muestra una descripción correspondiente a la entrada con la ayuda de un comando de eco. En este script, hemos asignado la variable DEPARTAMENTO como «Informática». Por lo tanto, se ejecuta el cuerpo del primer caso de patrón. 

Puede seguir las instrucciones que se detallan a continuación:

1. Abra la terminal (Ctrl + Alt + T) y cree el script:

department.sh

2. Agregue estas declaraciones al script:

#!/bin/bash


DEPARTMENT="Computer Science"

echo -n "Your DEPARTMENT is "

case $DEPARTMENT in

  "Computer Science")
    echo -n "Computer Science"
    ;;

   "Electrical and Electronics Engineering" | "Electrical Engineering")
    echo -n "Electrical and Electronics Engineering or Electrical Engineering"
    ;;

  "Information Technology" | "Electronics and Communication")
    echo -n "Information Technology or Electronics and Communication"
    ;;

  *)
    echo -n "Invalid"
    ;;
esac

3. A continuación se describe cada una de las líneas:

  • La primera línea del guión comienza con el shebang (#!).
  • Le indica al sistema operativo que use un intérprete particular para analizar el script.
  • Hemos inicializado una variable DEPARTAMENTO como «Informática».
  • Ahora, estamos usando una declaración de caso.
  • Cada expresión ha sido manejada a través de la sentencia case.
  • La última línea, esac, se ha utilizado para terminar la declaración del caso.

4. Guarde el guión.

5. Ejecute el script.

./department.sh

Producción:

Salida de una descripción para cada opción

Ejemplo 2: uso de casos de patrones múltiples

En cada cláusula, podemos usar múltiples casos de patrones. Si la expresión coincide con al menos un caso de patrón, el cuerpo de la cláusula se ejecuta. En este script, hemos asignado la variable DEPARTAMENTO como “Electrónica y Comunicación”. El tercer caso de patrón tiene dos valores separados por el operador de barra vertical ( | ). Por lo tanto, se ejecuta el cuerpo del caso del tercer patrón.

Puede seguir las instrucciones que se detallan a continuación:

1. Abra la terminal (Ctrl + Alt + T) y cree el script:

department.sh

2. Agregue estas declaraciones al script:

#!/bin/bash

DEPARTMENT="Electronics and Communication"

echo -n "Your DEPARTMENT is "

case $DEPARTMENT in

  "Computer Science")
    echo -n "Computer Science"
    ;;

   "Electrical and Electronics Engineering" | "Electrical Engineering")
    echo -n "Electrical and Electronics Engineering or Electrical Engineering"
    ;;

  "Information Technology" | "Electronics and Communication")
    echo -n "Information Technology or Electronics and Communication"
    ;;

  *)
    echo -n "Invalid"
    ;;
esac

3. Cada una de las líneas se ha comentado a continuación:

  • La primera línea del guión comienza con el shebang (#!).
  • Le indica al sistema operativo que use un intérprete particular para analizar el script.
  • Hemos inicializado una variable DEPARTAMENTO como “Electrónica y Comunicación”.
  • Ahora, estamos usando una declaración de caso.
  • Cada expresión ha sido manejada a través de la sentencia case.
  • La última línea, esac, se ha utilizado para terminar la declaración del caso.

4. Guarde el guión.

5. Ejecute el script.

./department.sh

Producción:

Uso de casos de patrones múltiples

3. Guarde el guión.

5. Ejecute el script.

./department.sh

Ejemplo 3: bucles for

En este script, hemos asignado el departamento de tres estudiantes de una clase en una array DEPARTAMENTO. En otras palabras, vamos a procesar más de una expresión que se describe en la variable DEPARTAMENTO. Para iterar sobre múltiples expresiones, podemos usar un bucle for a. 

Puede seguir las instrucciones que se detallan a continuación:

1. Abra la terminal (Ctrl + Alt + T) y cree el script:

department.sh

2. Agregue estas declaraciones al script:

#!/bin/bash

DEPARTMENT=("Electronics and Communication", "Computer Science", "Information Technology")

for value in "${DEPARTMENT[@]}"
do 

case $value in

  "Computer Science")
    echo -n "Computer Science "
    ;;

  "Electrical and Electronics Engineering" | "Electrical Engineering")
    echo -n "Electrical and Electronics Engineering or Electrical Engineering "
    ;;

  "Information Technology" | "Electronics and Communication")
    echo -n "Information Technology or Electronics and Communication "
    ;;

  *)
    echo -n "Invalid "
    ;;
esac
done

3. A continuación se describe cada una de las líneas:

  • La primera línea del guión comienza con el shebang (#!).
  • Le indica al sistema operativo que use un intérprete particular para analizar el script.
  • Hemos inicializado una array DEPARTAMENTO con tres strings literales.
  • Ahora, con la ayuda de un ciclo for, estamos iterando sobre la array de elementos.
  • Cada expresión ha sido manejada a través de la sentencia case.
  • La última línea, esac, se ha utilizado para terminar la declaración del caso.

4. Guarde el guión.

5. Ejecute el script.

./department.sh

Producción:

 para bucles

Ejemplo 4: Preguntar al usuario con Sí o No

Puede seguir las instrucciones que se detallan a continuación:

1. Abra la terminal (Ctrl + Alt + T) y cree el script:

student.sh

2. Agregue estas declaraciones al script:

#!/bin/bash

echo -n "Are you a student? [yes or no]: "
read response
case $response in

        "Y" | "y" | "YES" | "Yes" | "yes")
                echo -n "Yes, I am a student."
                ;;

        "N" | "n" | "No" | "NO" | "no" | "nO")
                echo -n "No, I am not a student.";
                
                ;;
        *) echo -n "Invalid input"
            ;;
esac

3. A continuación se explica cada una de las líneas:

  • La primera línea del guión comienza con el shebang (#!).
    • Le indica al sistema operativo que use un intérprete particular para analizar el script.
  • Al usuario se le pregunta «¿Eres un estudiante? [si o no]».
  • Ahora el usuario da una respuesta a través del teclado.
  • La salida de la respuesta se ha manejado a través de una declaración de caso.
  • La última línea, esac, se ha utilizado para terminar la declaración del caso.

4. Guarde el guión.

5. Ejecute el script usando el siguiente comando.

./student.sh

Producción:

Preguntar al usuario con Sí o No

Ejemplo 5: Envío de señal a un proceso

Puede seguir las instrucciones que se detallan a continuación:

1. Abra la terminal (Ctrl + Alt + T) y cree el script:

signals.sh

2. Agregue estas declaraciones al script:

#!/bin/bash

if [ $# -lt 2 ]
then
        echo "Usage : $0 Signalnumber PID"
        exit
fi

# Case statement
# Signal number (expression)
case "$1" in

1)  echo "Sending SIGHUP signal....."
    kill -SIGHUP $2
    ;;
2)  echo  "Sending SIGINT signal....."
    kill -SIGINT $2
    ;;
3)  echo  "Sending SIGQUIT signal....."
    kill -SIGQUIT $2
    ;;
4) echo  "Sending SIGKILL signals....."
   kill -SIGKILL $2
   ;;
*) echo "Signal number $1 has not been processed"
   ;;
esac

3. A continuación se explica cada una de las líneas:

  • $1 es el número de señal y $2 es la identificación del proceso.
  • Para pasar o enviar una señal a la identificación del proceso dado, estamos usando el comando matar.
  • Esto ejecutará el comando de suspensión durante unos segundos.
  • El cuerpo de la última comparación opcional *) se ejecutará en el caso predeterminado.

4. Guarde el guión.

5. Ejecute el script usando el siguiente comando.

./signals.sh

Producción:

$ sleep 10000

$ ps -a | grep sleep
23277 pts/2    00:00:00 sleep

$ ./signals.sh 9 31231
Sending SIGKILL signal

$ sleep 10000
Killed

Publicación traducida automáticamente

Artículo escrito por bhuwanesh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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