Tutoriales

Declaración de caso Bash – OSTechNix

En el artículo anterior vimos cómo trabajar con declaraciones condicionales en bash para evaluar condiciones y tomar decisiones basadas en los resultados. Del mismo modo, en este artículo, aprenderemos a Declaración de caso en scripts bash, que también se utilizan para evaluar condiciones. Puede utilizar una declaración de caso de bash en lugar de escribir una lista larga de if..elif..else Opinión. Si no tiene idea de las instrucciones condicionales, tenemos un artículo detallado sobre el tema. Te recomiendo que le eches un vistazo antes de leer este artículo.

Sintaxis de la declaración de caso

La sintaxis de la declaración de caso en bash se da a continuación:

case expression in
  pattern1) STATEMENTS ;;
  pattern2) STATEMENTS ;;
  Pattern3 | Pattern4 | pattern5) STATEMENTS ;;
  pattern-N) STATEMENTS ;;
  *) STATEMENTS ;;
esac

Explicación:

  1. La palabra clave "case" y "esac" marca el principio y el final de la declaración del caso.
  2. La palabra clave case debe ir seguida de una "expression". Esta expresión se evalúa y la salida se busca utilizando la lista de muestra.
  3. Después de la expresión "in" La palabra clave debe escribirse en eso. indica "value in patterns".
  4. Puedes crear tantos patrones como quieras. Puedes pensar en cualquier patrón como uno if y elif Cláusula en la declaración condicional. Si el valor evaluado de la expresión se compara con un patrón, este patrón ejecuta su bloque de código. El resto de patrones se omiten.
  5. Cada instrucción dentro del patrón debe comenzar con a. ser completado punto y coma doble (;;).
  6. Similar a la cláusula else en la instrucción if, hay un patrón estándar en la instrucción case llamado asterisco (*), que ejecuta su bloque de código si ninguno de los patrones coincide.

Ejemplo 1: calculadora con declaración de caso

En este ejemplo, he creado una calculadora simple con una declaración de caso. Déjame explicarte qué sucede cuando ejecutas este código.

  1. Se le solicita al usuario dos números que se almacenarán en variables "X" y "Y".
  2. Se solicita al usuario el tipo de operación (sumar, restar, multiplicar, dividir) y almacenarlo en la variable «OPERADOR».
  3. En la declaración de caso, la variable «OPERADOR» es valorado y diferente plantilla (+,-,x,/,%) se crean para varias operaciones.
  4. Cuando un patrón coincide, ese patrón ejecuta su declaración y omite todos los demás patrones en la declaración del caso.
  5. Si intenta ingresar valores distintos de los operadores aritméticos que desea, el valor predeterminado será plantilla (*) ejecuta su instrucción.
#!/usr/bin/env bash

read -p "Enter the first number(X)  :  " X
read -p "Enter the second number(Y) :  " Y
read -p "
Addition => +
Subtract => -
Multiply => x
Division => /
Reminder => %

Choose any one operator   :  " OPERATOR
case "$OPERATOR" in
 +)
   echo -e "nAddition of X and Y is $(( X + Y ))" ;;
 -)
   echo -e "nSubtraction of X and Y is $(( X - Y ))" ;;
 x)
   echo -e "nMultiply X and Y is $(( X * Y ))" ;;
 /)
   echo -e "nDivision of X and Y is $(( X / Y ))" ;;
 %)
   echo -e "nReminder of X and Y is $(( X % Y ))" ;;
 *)
   echo -e "n[ERROR] You have chosen an operator that is not in the list.
You can choose either(+, -, x, /, %) operator from the list.
Rerun the program again."
esac

Echa un vistazo a la imagen de abajo, te enviaré el código y elegiré el «Operador de suma».

Operador de suma

Estoy ejecutando el mismo código nuevamente, pero esta vez estoy dando un valor aleatorio que coincide con el patrón predeterminado (*) ejecutar su instrucción.

Patrón estándar
Patrón estándar

Ejemplo 2: creación de varios patrones en una sola cláusula

En el ejemplo anterior, creamos diferentes patrones para diferentes operadores aritméticos. También es posible crear múltiples patrones en la misma cláusula, y si alguno de los patrones coincide, se ejecuta la instrucción correspondiente. La sintaxis es la misma, pero agrega un. adicional tubo Símbolo (|) y agregue diferentes patrones en la misma línea que se muestra a continuación.

case expression in
   Pattern1 | Pattern2 | pattern3) 
   STATEMENTS ;;
   *)
   STATEMENTS ;;
esac

En el siguiente ejemplo, el usuario ingresa el año como entrada y recibe los detalles del límite naranja de los datos de la IPL. En 2015, 2017 y 2019 el mismo jugador ganó la gorra naranja, así que creé un año diferente como muestra en la misma cláusula.

read -p "Choose the year between 2015 - 2021 to get orange cap player name: " CAP
case "$CAP" in
 2015 | 2017 | 2019)
   echo -e "nOrange cap winner for $YEAR is David Warner" ;;
 2016)
   echo -e "nOrange cap winner for $YEAR is Virat Kohli" ;;
 2018)
  echo -e "nOrange cap winner for $YEAR is Kane Williamson" ;;
 2020)
   echo -e "nOrange cap winner for $YEAR is KL Rahul" ;;
 2021)
   echo -e "nOrange cap winner for $YEAR is Ruturaj Gaikwad" ;;
 *)
   echo -e "n[ERROR] Enter the year between 2015 - 2021."
esac
Múltiples patrones en la misma cláusula
Múltiples patrones en la misma cláusula

Ejemplo 3: comparación de patrones en una declaración de caso

La coincidencia de patrones se puede utilizar en declaraciones de casos. Estoy usando el mismo ejemplo de la sección anterior, pero agregando un patrón adicional (20[2-9][2-9]) Si el usuario ingresa un año después de 2021, se imprimirá un mensaje que dice «Serie pendiente».

read -p "Choose the year between 2015 - 2021 to get orange cap player name: " CAP
case "$CAP" in
 2015 | 2017 | 2019)
   echo -e "nOrange cap winner for $YEAR is David Warner" ;;
 2016)
   echo -e "nOrange cap winner for $YEAR is Virat Kohli" ;;
 2018)
  echo -e "nOrange cap winner for $YEAR is Kane Williamson" ;;
 2020)
   echo -e "nOrange cap winner for $YEAR is KL Rahul" ;;
 2021)
   echo -e "nOrange cap winner for $YEAR is Ruturaj Gaikwad" ;;
 20[2-9][2-9])
   echo -e "nSeries is yet to happen for the year $CAP" ;;
 *)
   echo -e "n[ERROR] Enter the year between 2015 - 2021."
esac
Declaración de caso con coincidencia de patrones
Declaración de caso con coincidencia de patrones

Ejemplo 4: confirmación de usuario recibida

A veces puede pedirle confirmación al usuario para pasar al siguiente paso de su programa. Usar una declaración de caso sería una buena opción para este caso de uso.

El ejemplo anterior escribe patrones en una línea e instrucciones en otra línea, pero también puede escribir patrones e instrucciones en una sola línea, como se muestra a continuación.

read -p "Input file is received in CSV format, Please confirm to load the data into production database  : " CONFIRM
case "$CONFIRM" in
 [Yy] | [Yy][Ee][Ss] ) echo "++ Running the utility to load the data to the database.." ;;
 [Nn] | [Nn][Oo] ) echo -e "++ Skipping load db step upon user confirmation..n Exiting the script.." ;;
 *) echo -e "[ERROR] = Wrong Input, Exiting the script.."
esac
Confirmación del usuario con declaración de caso
Confirmación del usuario con declaración de caso

Ejemplo 5: declaración de caso con códigos de retorno

Puede escribir lógica para capturar el código de retorno del comando que ejecutó anteriormente y realizar alguna acción utilizando declaraciones de casos. Estoy creando un cuadro de diálogo GUI para aceptar el nombre de usuario y la contraseña del usuario que está usando Cenit. Si el usuario envía correctamente el nombre de usuario y la contraseña, Zenity devolverá el código de retorno como cero y, en base a eso, agregué la lógica para agregar un nuevo usuario. Cualquier cosa que no sea cero resultará en un mensaje de error.

INFO=$(zenity --password --username)
case $? in
 0)
   USERNAME=$(echo $INFO | awk -F "|" ' print $1 ')
   PASSWORD=$(echo $INFO | awk -F "|" ' print $2 ')
   useradd -m -p "$PASSWORD" "$USERNAME"
   ;;
 *)
   echo "[ERROR] - User not added."
esac
Script de creación de usuarios
Script de creación de usuarios

Yo presioné «Abortar» Botón en el cuadro de diálogo para que obtengo un error al usar el patrón predeterminado (*).

Cuadro de diálogo cancelado
Cuadro de diálogo cancelado

Guiones de referencia

Para familiarizarse con las declaraciones de casos, puede mirar el código existente escrito con declaraciones de casos. Un mejor lugar para comenzar sería leer los scripts de inicio en /etc/init.d Directorio. Por ejemplo, instalé Virtualbox en mi computadora y tiene un archivo de inicio en /etc/init.d Directorio. Hay una sección de código escrita con una declaración de caso que da una buena idea de cómo funciona la declaración de caso.

$ cd /etc/init.d/
$ cat bluetooth
Scripts de inicio
Scripts de inicio

diploma

En este artículo, aprendimos sobre la declaración Case en Bash y las diferentes formas en que se puede usar. Tanto el enunciado condicional como el enunciado del caso tienen el mismo propósito. Debe tener una mejor comprensión de qué método es apropiado para el caso de uso. Las declaraciones de casos también se utilizan cuando necesita crear funciones de ayuda con getopt y getopts Programas. Cree un guión y practique los ejemplos que le dimos aquí para comprender más acerca de las declaraciones de casos.

Publicaciones relacionadas

Deja una respuesta

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

Botón volver arriba