Secuencias de comandos Bash: declaración de caso
una declaración de caso en scripts bash se utiliza cuando se debe tomar una decisión frente a múltiples opciones. En otras palabras, es útil cuando una expresión tiene la posibilidad de tener múltiples valores. Esta metodología puede verse como un reemplazo de múltiples declaraciones if en un script. Las declaraciones de caso tienen una ventaja sobre las declaraciones if porque mejoran la legibilidad de nuestro código y son más fáciles de mantener. Las declaraciones de caso en un script Bash son bastante similares a las declaraciones de caso en lenguaje C. Pero a diferencia de C, la declaración de 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 en C para dejar de buscar un patrón.
La sintaxis básica de una declaración de caso se proporciona a continuación,
Sintaxis:
case EXPRESSION in Pattern_Case_1) STATEMENTS ;; Pattern_Case_1) STATEMENTS ;; Pattern_Case_N) STATEMENTS ;; *) STATEMENTS ;; esac
Así es como funciona la declaración del caso:
-
EXPRESSION>es la variable o valor que se evalúa frente a diferentes patrones (casos) para encontrar una coincidencia. - La declaración del caso comienza con la palabra clave.
case>Seguido por elEXPRESSION>ser evaluado. - Cada caso está definido por un
Pattern_Case>que representa un valor o patrón específico para ser comparado con elEXPRESSION>. - Después de cada
Pattern_Case>, hay declaraciones que se ejecutarán si elEXPRESSION>coincide con el específicoPattern_Case>. Estas declaraciones se denotan porSTATEMENTS>. - El
;;>al final de cadaSTATEMENTS>block indica el final de un bloque de casos. - El
*)>Es un caso especial conocido como caso predeterminado. Si ninguno de los patrones anteriores coincide con elEXPRESSION>, elSTATEMENTS>bajo la*)>Se ejecutará el bloque. - El
esac>La palabra clave marca el final de la declaración del caso.
- En caso de que no coincida ningún patrón, el estado de devolución es cero. De lo contrario, el estado de retorno es el estado de salida del cuerpo ejecutado del caso del patrón coincidente.
- Al igual que C proporciona la palabra clave predeterminada para la declaración predeterminada, del mismo modo en la declaración de caso Bash, podemos usar el símbolo de asterisco comodín (*) y definir un caso de patrón final para definir el caso predeterminado.
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 Ciencias de la Computación. Por lo tanto, se ejecuta el cuerpo del primer caso de patrón.
Puede seguir las instrucciones que se indican a continuación:
1. Abra la terminal (Ctrl + Alt + T) y cree el script:
department.sh
2. Agregue estas declaraciones al guión:
#!/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. Cada una de las líneas se describe a continuación:
- La primera línea del guión comienza con el tinglado (#!).
- Le indica al sistema operativo que utilice 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 declaración del caso.
- La última línea, esac, se ha utilizado para finalizar la declaración del caso.
4. Guarde el script y hágalo ejecutable.
chmod +x department.sh
5. Ejecute el script.
./department.sh
Producció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, entonces se ejecuta el cuerpo de la cláusula. 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 tercer caso de patrón.
Puede seguir las instrucciones que se indican a continuación:
1. Abra la terminal (Ctrl + Alt + T) y cree el script:
department.sh
2. Agregue estas declaraciones al guión:
#!/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 tinglado (#!).
- Le indica al sistema operativo que utilice 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 declaración del caso.
- La última línea, esac, se ha utilizado para finalizar la declaración del caso.
4. Guarde el script y hágalo ejecutable.
chmod +x department.sh
5. Ejecute el script.
./department.sh
Producción:
Ejemplo 3: bucles for
En este script, hemos asignado el departamento de tres estudiantes de una clase en un DEPARTAMENTO de matriz. 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.
Puede seguir las instrucciones que se indican a continuación:
1. Abra la terminal (Ctrl + Alt + T) y cree el script:
department.sh
2. Agregue estas declaraciones al guión:
#!/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. Cada una de las líneas se describe a continuación:
- La primera línea del guión comienza con el tinglado (#!).
- Le indica al sistema operativo que utilice un intérprete particular para analizar el script.
- Hemos inicializado una matriz DEPARTAMENTO con tres cadenas literales.
- Ahora, con la ayuda de un bucle for, estamos iterando sobre la matriz de elementos.
- Cada expresión ha sido manejada a través de la declaración del caso.
- La última línea, esac, se ha utilizado para finalizar la declaración del caso.
4. Guarde el script y hágalo ejecutable.
chmod +x department.sh
5. Ejecute el script.
./department.sh
Producción:
Ejemplo 4: Preguntar al usuario con Sí o No
Puede seguir las instrucciones que se indican a continuación:
1. Abra la terminal (Ctrl + Alt + T) y cree el script:
department.sh
2. Agregue estas declaraciones al guión:
#!/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 tinglado (#!).
- Le indica al sistema operativo que utilice un intérprete particular para analizar el script.
- Se le pregunta al usuario: ¿Es usted estudiante? [sí o no].
- Ahora el usuario da una respuesta a través del teclado.
- El resultado de la respuesta se ha manejado a través de una declaración de caso.
- La última línea, esac, se ha utilizado para finalizar la declaración del caso.
4. Guarde el script y hágalo ejecutable.
chmod +x department.sh
5. Ejecute el script usando el siguiente comando.
./department.sh
Producción:
Ejemplo 5: envío de señal a un proceso
Puede seguir las instrucciones que se indican a continuación:
1. Abra la terminal (Ctrl + Alt + T) y cree el script:
signals.sh
2. Agregue estas declaraciones al guión:
#!/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 dada, estamos usando el comando kill.
- 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
Ejemplo 3: bucles for