GNU/Linux >> Tutoriales Linux >  >> Linux

5 ejemplos de declaraciones de casos Bash

La declaración de caso de shell Bash es similar a la declaración de cambio en C. Se puede usar para probar valores simples como enteros y personajes.

La declaración de caso no es un bucle, no ejecuta un bloque de código n veces. En cambio, bash shell verifica la condición y controla el flujo del programa.

En este artículo, revisemos el comando bash case con 5 ejemplos prácticos.

La construcción de casos en shell bash nos permite probar cadenas contra patrones que pueden contener caracteres comodín. La instrucción bash case es la forma más simple de la instrucción bash if-then-else.

Sintaxis de la declaración bash case.

case expression in
    pattern1 )
        statements ;;
    pattern2 )
        statements ;;
    ...
esac

Los siguientes son los puntos clave de las declaraciones de bash case:

  • La instrucción Case primero expande la expresión e intenta compararla con cada patrón.
  • Cuando se encuentra una coincidencia, se ejecutan todas las declaraciones asociadas hasta el punto y coma doble (;;).
  • Después de la primera coincidencia, el caso termina con el estado de salida del último comando que se ejecutó.
  • Si no hay ninguna coincidencia, el estado de salida del caso es cero.

Ejemplo de caso Bash 1. Envío de señal a un proceso

El siguiente script acepta el número de señal y la identificación del proceso como sus argumentos, y envía la señal a una identificación de proceso dada usando el nombre de la señal.

Este script es para demostrar el uso de la declaración de caso.

$ cat signal.sh
#!/bin/bash

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

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
    ;;
9) echo  "Sending SIGKILL signal"
   kill -SIGKILL $2
   ;;
*) echo "Signal number $1 is not processed"
   ;;
esac

En el ejemplo anterior:

  • $1 y $2 son el número de señal y la identificación del proceso respectivamente.
  • Usando el comando kill, envía la señal correspondiente a la identificación del proceso dada.
  • Ejecuta el comando de suspensión durante varios segundos.
  • La última comparación opcional *) es un caso predeterminado y coincide con cualquier cosa.

Uso del script de shell anterior:averigüe la identificación del proceso del comando de suspensión y envíe la señal de eliminación a esa identificación del proceso para eliminar el proceso.

$ sleep 1000

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

$ ./signal.sh 9 23277
Sending SIGKILL signal

$ sleep 1000
Killed

Además, consulte nuestro artículo de eliminación anterior:4 métodos para eliminar un proceso.

Ejemplo de caso Bash. 2. Coincidencia de patrones en un archivo

Este ejemplo imprime el número de líneas, el número de palabras y elimina las líneas que coinciden con el patrón dado.

$ cat fileop.sh
#!/bin/bash

# Check 3 arguments are given #
if [ $# -lt 3 ]
then
        echo "Usage : $0 option pattern filename"
        exit
fi

# Check the given file is exist #
if [ ! -f $3 ]
then
        echo "Filename given \"$3\" doesn't exist"
        exit
fi

case "$1" in

# Count number of lines matches
-i) echo "Number of lines matches with the pattern $2 :"
    grep -c -i $2 $3
    ;;
# Count number of words matches
-c) echo "Number of words matches with the pattern $2 :"
    grep -o -i $2 $3 | wc -l
    ;;
# print all the matched lines
-p) echo "Lines matches with the pattern $2 :"
    grep -i $2 $3
    ;;
# Delete all the lines matches with the pattern
-d) echo "After deleting the lines matches with the pattern $2 :"
    sed -n "/$2/!p" $3
    ;;
*) echo "Invalid option"
   ;;
esac

A continuación se muestra la ejecución del script anterior.

$ cat text
Vim is a text editor released by Bram Moolenaar in 1991 for the Amiga computer.
The name "Vim" is an acronym for "Vi IMproved" because Vim was created as an extended version of the vi editor, with many additional features designed to be helpful in editing program source code.
Although Vim was originally released for the Amiga, Vim has since been developed to be cross-platform, supporting many other platforms.
It is the most popular editor amongst Linux Journal readers.

Salida de expresión regular de caso Bash. Después de eliminar las líneas, las coincidencias con el patrón Vim:

$ ./fileop.sh  -d Vim text
It is the most popular editor amongst Linux Journal readers.

Además, consulte nuestro artículo anterior sobre Bash ~ expansión y { } expansión.

Ejemplo de caso Bash 3. Encuentra el tipo de archivo de la extensión

Este ejemplo imprime el tipo de un archivo (texto, Csource, etc.) según la extensión del nombre del archivo.

$ cat filetype.sh
#!/bin/bash
for filename in $(ls)
do
	# Take extension available in a filename
        ext=${filename##*\.}
        case "$ext" in
        c) echo "$filename : C source file"
           ;;
        o) echo "$filename : Object file"
           ;;
        sh) echo "$filename : Shell script"
            ;;
        txt) echo "$filename : Text file"
             ;;
        *) echo " $filename : Not processed"
           ;;
esac
done

$ ./filetype.sh
a.c : C source file
b.c : C source file
c1.txt : Text file
fileop.sh : Shell script
obj.o : Object file
text : Not processed
t.o : Object file

Ejemplo de caso Bash 4. Preguntar al usuario con Sí o No

En la mayor parte de la instalación del software, durante el acuerdo de licencia, se le pedirá al usuario que ingrese sí o no. El siguiente fragmento de código es una de las formas de obtener la entrada de sí o no del usuario.

$ cat yorno.sh
#!/bin/bash

echo -n "Do you agree with this? [yes or no]: "
read yno
case $yno in

        [yY] | [yY][Ee][Ss] )
                echo "Agreed"
                ;;

        [nN] | [n|N][O|o] )
                echo "Not agreed, you can't proceed the installation";
                exit 1
                ;;
        *) echo "Invalid input"
            ;;
esac

$ ./yorno.sh
Do you agree with this? [yes or no]: YES
Agreed

Si hay varios patrones separados por caracteres verticales, la expresión puede coincidir con cualquiera de ellos para que se ejecuten las declaraciones asociadas. Los patrones se comprueban en orden hasta que se encuentra una coincidencia; si no se encuentra ninguno, no pasa nada.

Además, consulte nuestro artículo anterior de 15 ejemplos de matrices bash.

Ejemplo de caso Bash 5. Script de inicio

Los scripts de inicio en el directorio /etc/init.d usan la instrucción case para iniciar y detener la aplicación.

Puede usar cualquier tipo de patrones, pero siempre se recomienda usar una declaración de caso cuando esté probando valores de primitivas. (es decir, números enteros o caracteres).

$ cat startpcapp
#!/bin/bash

case "$1" in
'start')
echo "Starting application"
/usr/bin/startpc
;;
'stop')
echo "Stopping application"
/usr/bin/stoppc
;;
'restart')
echo "Usage: $0 [start|stop]"
;;
esac

$ ./startpcapp start
Starting application
/usr/bin/startpc started

Lecturas recomendadas

Bash 101 Hacks, por Ramesh Natarajan . Paso la mayor parte de mi tiempo en el entorno Linux. Entonces, naturalmente, soy un gran admirador de la línea de comandos de Bash y las secuencias de comandos de Shell. Hace 15 años, cuando estaba trabajando en diferentes versiones de *nix, solía escribir mucho código en C shell y Korn shell. Años más tarde, cuando comencé a trabajar en Linux como administrador del sistema, prácticamente automaticé todas las tareas posibles utilizando scripts de shell Bash. Basado en mi experiencia con Bash, he escrito el libro electrónico Bash 101 Hacks que contiene 101 ejemplos prácticos tanto en la línea de comandos de Bash como en las secuencias de comandos de shell. Si ha estado pensando en dominar Bash, hágase un favor y lea este libro, que lo ayudará a tomar el control de su línea de comandos y secuencias de comandos de shell de Bash.


Linux
  1. Uso de declaraciones de casos en Bash

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

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

  4. 6 ejemplos de expresiones condicionales de Bash (-e, -eq, -z, !=, [, [[ ..)

  5. Bash para ejemplos de bucle

Declaración de caso Bash

Declaración de Bash if..else

35 ejemplos de secuencias de comandos Bash

Bash Scripting – Declaración de caso

Cómo trabajar con declaraciones de casos en scripts Bash

Sintaxis de Bash If Else con ejemplos