GNU/Linux >> Tutoriales Linux >  >> Linux

Sintaxis y ejemplos de declaraciones de caso Bash

Introducción

El case de bash es la forma más simple de la declaración condicional if elif else. El case declaración simplifica condiciones complejas con múltiples opciones diferentes. Esta declaración es más fácil de mantener y más legible que if anidado declaraciones.

El case prueba el valor de entrada hasta que encuentra el patrón correspondiente y ejecuta el comando vinculado a ese valor de entrada. Por lo tanto, es una excelente opción para crear menús donde los usuarios seleccionan una opción que activa la acción correspondiente.

En este tutorial, aprenderá el case de bash declaración conceptos básicos y cómo usarlo en scripts de shell.

Requisitos previos

  • Una máquina que ejecuta Linux.
  • Acceso a la línea de comandos.
  • Un editor de texto como vi/vim.

Sintaxis de declaración de caso bash

El case de bash declaración toma la siguiente sintaxis:

case $variable in
pattern-1)
  commands;;
pattern-2)
  commands;;
pattern-3)
  commands;;
pattern-N)
  commands;;
*)
  commands;;
esac

El case la declaración comienza con el case palabra clave seguida de $variable y el in palabra clave. La declaración termina con el case palabra clave al revés - esac .

$variable

  • El script compara la entrada $variable contra los patrones en cada cláusula hasta que encuentre una coincidencia.

Patrones

  • Un patrón y sus comandos forman una cláusula , que termina con ;; .
  • Los patrones admiten caracteres especiales.
  • El ) operador termina una lista de patrones.
  • El | el operador separa varios patrones.
  • El script ejecuta los comandos correspondientes al primer patrón que coincide con la entrada $variable .
  • El asterisco * El símbolo define el caso predeterminado, generalmente en el patrón final.

Estado de salida

El script tiene dos estados de salida:

  • 0 . El estado de retorno cuando la entrada no coincide con ningún patrón.
  • Estado de comando ejecutado . Si el comando hace coincidir la variable de entrada con un patrón, se devuelve el estado de salida del comando ejecutado.

Ejemplos de declaración de caso Bash

Esta sección muestra ejemplos prácticos del uso de bash case declaración.

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

El siguiente ejemplo es un script que le permite al usuario elegir un color y muestra un comentario correspondiente a la entrada usando el comando echo.

Siga las instrucciones a continuación:

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

vi color.sh

2. Agregue las siguientes líneas al script:

#!/bin/bash
echo "Which color do you like best?"
echo "1 - Blue"
echo "2 - Red"
echo "3 - Yellow"
echo "4 - Green"
echo "5 - Orange"
read color;
case $color in
  1) echo "Blue is a primary color.";;
  2) echo "Red is a primary color.";;
  3) echo "Yellow is a primary color.";;
  4) echo "Green is a secondary color.";;
  5) echo "Orange is a secondary color.";;
  *) echo "This color is not available. Please choose a different one.";; 
esac

Cada una de las líneas tiene el siguiente rol:

  • La primera línea de cada guión suele ser el shebang (#! ), que le indica al sistema operativo qué intérprete usar para analizar el archivo.
  • Las líneas 2-7 son el menú de opciones presentado al usuario para elegir.
  • El read color; La variable solicita al usuario una respuesta y la almacena.
  • El case declaración contiene las posibles respuestas que corresponden a la entrada del usuario. En este ejemplo, la salida es echo salida de comando.
  • La última línea, esac , finaliza el case declaración.

3. Guarde el script y salga de vi con el siguiente comando:

:wq

4. Antes de ejecutar cada script, asegúrese de modificarlo para que sea ejecutable:

chmod +x color.sh

5. Ejecute el script:

./color.sh

El script ofrece el menú de opciones y muestra un mensaje diferente según la opción seleccionada.

Ejemplo 2:uso de varios patrones

El case declaración permite el uso de múltiples patrones en cada cláusula. Si la expresión coincide con los patrones especificados, el script ejecuta los comandos de esa cláusula.

Este script de ejemplo solicita al usuario que ingrese un mes y genera la cantidad de días. Hay tres respuestas posibles:

  • 30 días.
  • 31 días.
  • 28 o 29 días para febrero.

Siga los pasos a continuación para crear el script:

1. Cree el script month.sh ejecutando:

vi month.sh

2. Introduzca las siguientes líneas y guarde el script:

#!/bin/bash
shopt -s nocasematch
echo "Enter the name of a month."
read month
case $month in
  February)
 
echo "There are 28/29 days in $month.";;
  April | June | September | November)
echo "There are 30 days in $month.";;
  January | March | May | July | August | October | December)
echo "There are 31 days in $month.";;
  *)
echo "Unknown month. Please check if you entered the correct month name: $month";;
esac

En el ejemplo anterior:

  • La shopt comando con -s nocasematch La opción reduce la posibilidad de error con la combinación de patrones que no distingue entre mayúsculas y minúsculas.
  • El símbolo de la pipa | separa los patrones en cada una de las cláusulas.

3. Haga que el script sea ejecutable:

chmod +x month.sh

4. Ejecute el script:

./month.sh

El script ignora las diferencias entre mayúsculas y minúsculas y genera el número correcto de días en el mes seleccionado.

Ejemplo 3:Bucles for

Usa un for bucle en case instrucciones cuando hay muchas expresiones para procesar. El siguiente script devuelve todos los tipos de archivos de un directorio.

Siga los pasos a continuación:

1. Cree el script de shell:

vi filelist.sh

2. Ingrese las siguientes líneas y luego guarde el script:

#!/bin/bash
for file in $(ls)
do
Extension=${file##*.}
case "$Extension" in
  sh) echo "Shell script: $file";;
  md) echo "A markdown file: $file";;
  png) echo "PNG image file: $file";;
  txt) echo "A text file: $file";;
  zip) echo "An archive: $file";;
  conf) echo "A configuration file: $file";;
  py) echo "A Python script: $file";;
  *) echo "Unknown file type: $file";;
esac
done

En el ejemplo anterior:

  • Los ls El comando extrae una lista de archivos del directorio.
  • El for loop aplica archivo globbing para extraer la extensión de cada archivo.

3. Haga que el script sea ejecutable:

chmod +x filelist.sh

4. Ejecute el script:

./filelist.sh

El script identifica cada tipo de archivo presente en el directorio actual.

Ejemplo 4:crear una libreta de direcciones

Usa el case declaración para crear una base de datos simple y generar rápidamente la información solicitada. El siguiente ejemplo muestra el nombre, la dirección de correo electrónico y la dirección de la persona seleccionada:

1. Cree el guión:

vi phonebook.sh

2. Agregue las siguientes líneas y guarde el script:

#!/bin/bash
echo "Choose a contact to display information:"
echo "[C]hris Ramsey"
echo "[J]ames Gardner"
echo "[S]arah Snyder"
echo "[R]ose Armstrong"
read person
case "$person" in
  "C" | "c" ) echo "Chris Ramsey"
echo "[email protected]"
echo "27 Railroad Dr. Bayside, NY";;
  "J" | "j" ) echo "James Gardner"
echo "[email protected]"
echo "31 Green Street, Green Cove Springs, FL";;
  "S" | "s") echo "Sarah Snyder"
echo "[email protected]"
echo "8059 N. Hartford Court, Syosset, NY";;
  "R" | "r") echo "Rose Armstrong"
echo "[email protected]"
echo "49 Woodside St., Oak Forest, IL";;
  *) echo "Contact doesn't exist.";;
esac

3. Cambie el script:

chmod +x phonebook.sh

3. Ejecute el script:

./phonebook.sh

El script genera los detalles de contacto de la persona seleccionada. Al seleccionar una opción que no aparece en la lista, se notifica al usuario que el contacto no existe.

Ejemplo 5:Comprobar tipo de carácter

El siguiente ejemplo muestra cómo usar el case instrucción para verificar qué tipo de carácter ha ingresado el usuario.

Siga los pasos a continuación:

1. Cree el guión:

vi character.sh

2. Agregue las siguientes líneas y guarde el script:

#!/bin/bash
echo "Enter a character:"
read var
case $var in
  [[:lower:]) echo "You entered a lowercase character.";;
  [[:upper:]]) echo "You entered an uppercase character.";;
  [0-9]) echo "You entered a digit.";;
  ?) echo "You entered a special character.";;
  *) echo "You entered multiple characters.";;
esac

En el ejemplo anterior:

  • El $var la variable de control almacena la entrada.
  • En lugar de escribir todas las combinaciones posibles para hacer coincidir, use los corchetes [] para denotar un rango de caracteres. Use corchetes dobles [[]] para rangos POSIX. if-else requiere ingresar cada condición de carácter individualmente.
  • El ? carácter cubre caracteres que no son minúsculas, mayúsculas o dígitos. Sustituye solo un carácter, a diferencia de * que reemplaza todo lo demás no cubierto por las condiciones anteriores.

3. Cambie los permisos para que el script sea ejecutable:

chmod +x character.sh

4. Ejecute el script:

./character.sh

El resultado indica el tipo de carácter ingresado después de compararlo con las condiciones especificadas.


Linux
  1. Cómo programar con Bash:Sintaxis y herramientas

  2. Declaración de Bash If-Else con ejemplos

  3. Ejemplos de ciclos for y while de Bash

  4. 4 Ejemplos de sentencias If de Awk (if, if else, if else if, :? )

  5. 5 ejemplos de declaraciones de casos Bash

Bash Scripting – Declaración de caso

Cómo trabajar con declaraciones de casos en scripts Bash

Sintaxis de Bash If Else con ejemplos

Comprender Bash If Else y otras declaraciones condicionales

Tutorial de variables Bash:6 ejemplos prácticos de variables locales y globales de Bash

Uso y ejemplos sensibles a mayúsculas y minúsculas de Grep