Cómo usar la declaración del caso bash

Cómo usar la declaración del caso bash

La declaración de caso se usa generalmente en Bash cuando tiene varias opciones para seleccionar entre. Usarlo en lugar de declaraciones anidadas de if-else ayuda a mantener sus scripts bash más fácil de leer y mantener.

La declaración de caso bash ha sido diseñada similar a la declaración de caso de JavaScript y C. A diferencia de la instrucción Switch de C, la instrucción BASH Case deja de buscar otras coincidencias tan pronto como encuentre una y completa las declaraciones que se escriben para el patrón.

En esta guía, explicaremos cómo puede usar la declaración de casos bash utilizando dos ejemplos y algunos escenarios en Ubuntu 22.04.

Sintaxis de la declaración de caso

Si desea comprender cómo usar la declaración de caso, debe comprender la sintaxis. Se parece a esto:

Caso $ variable en
patrón1)
comandos
;;
patrón2)
comandos
;;
patrón)
comandos
;;
*)
comandos
;;
ESAC

Vamos a desglosarlo:

  • Es imperativo que abra la declaración con la palabra clave "caso" y la cierre con la palabra clave "ESAC".
  • Usamos el soporte de cierre ")" para terminar un patrón.
  • Los patrones que contienen comandos se conocen como cláusulas y terminan con ";;".
  • Puede usar un "*" (asterisco) para definir un caso predeterminado.
  • Cuando el comando de caso coincide con la variable de entrada con los patrones definidos, en una coincidencia, el conjunto de código de comandos correspondiente se ejecutan hasta los semicolones dobles.
  • Si desea que se ejecute el mismo comando para múltiples patrones, puede usar el operador de tubería para armar los patrones como tal:
Caso $ variable en
Patrón1 | patrón2)
comandos
;;
Patrón3 | patrón4)
comandos
;;

Ahora, echemos un vistazo a un par de ejemplos para comprender mejor esta sintaxis.

Vacaciones en un mes

Para nuestro primer ejemplo, escribamos un guión que toma un mes como aportes del usuario y responde con unas vacaciones internacionales que caen en el mes. El "Shopt -s nocasematch"El comando permite que su script ignore el caso de la entrada y lo coincida con los casos, independientemente de eso.

#!/bin/bash
#Code para ignorar las restricciones de casos
Shopt -s nocasematch
Declaración de #case
Echo "Ingrese el nombre de un mes"
mes de lectura
Caso $ mes en
Enero)
Echo "18 de enero es el Día Nacional del Tesauro"
;;
Febrero)
Echo "20 de febrero es el Día Mundial de la Justicia Social"
;;
Marzo)
Echo "29 de marzo es el pequeño día rojo."
;;
Abril)
Echo "1 de abril es el día internacional de la pelea de almohadas"
;;
*)
Echo "no pudo encontrar ninguna fiesta en su mes específico"
ESAC

En este script, tomamos el nombre de un mes del usuario y lo almacenamos en una variable llamada "mes". Luego, utilizando la declaración de caso, comparamos la entrada con algunos meses preseleccionados y luego mostramos las vacaciones respectivas. Puede ver que si el código no encuentra ninguna coincidencia en los casos definidos, entonces tiene un eco fuera de los casos para mostrar otro mensaje. Y después de eso, cerramos la estructura del código de caso con la palabra clave "ESAC".

Guarde el archivo de script y salga del editor nano. Ejecute el script usando el siguiente comando:

$ Mes de Bash.mierda

Puede ver que el código respondió con las vacaciones relevantes para la entrada que se atendió con casos, y respondió con desconocido cuando la entrada estaba fuera de alcance de los casos programados.

El idioma oficial de un país

Escribamos un script que utiliza los casos compuestos. Para este ejemplo, escribamos un guión que tome un país e imprima el idioma oficial de ese país.

#!/bin/bash
#Code para ignorar las restricciones de casos
Shopt -s nocasematch
Declaración de #case
Echo "Entra en un país:"
Leer país
echo "El idioma oficial de $ country es"
Caso $ país en
América | Londres)
Echo "Inglés"
;;
Brasil | Portugal | México)
Echo "español"
;;
China | Singapur | Taiwán)
Echo "mandarín"
;;
*)
Echo "desconocido"
;;
ESAC

Declaración de casos con enteros

También puede crear los casos en los que también debe coincidir con la entrada con enteros. Creemos un script que tome la entrada de los usuarios en el rango de 1-10, y luego se muestra si el número es uniforme o impar o impar.

#!/bin/bash
Declaración de #case
Echo "Ingrese un número de 1 a 10:"
LEER NUM
Caso $ num en
"1" | "3" | "5" | "7" | "9")
Echo "Su entrada es un número impar"
;;
"2" | "4" | "6" | "8" | "10")
Echo "Su entrada es un número uniforme"
;;
*)
Echo "Su entrada está fuera del rango requerido"
;;
ESAC

Ejecutar este script le brinda la siguiente salida:

También puede probar con los otros números.

Declaración de caso con bucle

Puede usar la instrucción de caso dentro de los bucles for-bucle si desea verificar múltiples valores de entrada en sus casos establecidos. Vamos a ilustrar este caso escribiendo un script que realice todos los archivos en el directorio actual y muestre su tipo de archivo.

#!/bin/bash
#para cada archivo en el directorio actual
Para el archivo en $ (LS)
hacer
#extrar la extensión del archivo
Extensión = $ archivo ##*.
caso "$ extensión" en
mierda
echo "archivo de script bash: $ archivo"
;;
PNG)
echo "archivo de imagen png: archivo $"
;;
TXT)
echo "archivo de texto: $ archivo"
;;
*)
echo "archivo desconocido"
;;
ESAC
hecho

Ejecución de este script realiza cada archivo en el activo actual y lo muestra junto con su tipo de archivo (solo los casos que especificamos). Como puede ver, al ejecutar este script que solo tenemos un archivo en el directorio actual, lo muestra junto con la extensión.

Conclusión

Volver a su código anterior y descubrir qué línea lo hace puede ser una tarea muy engorrosa, especialmente si fue escrita por otra persona. Agregarle es aún más difícil. El uso de la instrucción Case en sus scripts de Bash puede facilitarle que sea legible a través de la sintaxis fácil.

Como se demuestra con los ejemplos, puede usarlo con cuerdas, múltiples cuerdas, enteros y bucles, entre muchos otros. Incluso puede manejar los códigos de salida para su programa con declaraciones de casos. Es muy versátil.

Si enfrenta algún problema con la declaración del caso, no dude en involucrarnos y con gusto lo ayudaremos.