GNU/Linux >> Linux Esercitazione >  >> Linux

5 Esempi di dichiarazioni di Bash Case

L'istruzione bash shell case è simile all'istruzione switch in C. Può essere utilizzata per testare valori semplici come numeri interi e caratteri.

L'istruzione Case non è un ciclo, non esegue un blocco di codice per n numero di volte. Invece, bash shell controlla la condizione e controlla il flusso del programma.

In questo articolo esaminiamo il comando bash case con 5 esempi pratici.

Il costrutto case nella shell bash ci consente di testare le stringhe rispetto a modelli che possono contenere caratteri jolly. L'istruzione bash case è la forma più semplice dell'istruzione bash if-then-else.

Sintassi dell'istruzione bash case.

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

Di seguito sono riportati i punti chiave delle dichiarazioni bash case:

  • L'istruzione Case prima espande l'espressione e cerca di confrontarla con ogni modello.
  • Quando viene trovata una corrispondenza, vengono eseguite tutte le istruzioni associate fino al doppio punto e virgola (;;).
  • Dopo la prima corrispondenza, il caso termina con lo stato di uscita dell'ultimo comando eseguito.
  • Se non c'è corrispondenza, lo stato di uscita del caso è zero.

Esempio di caso Bash 1. Invio di segnali a un processo

Lo script seguente accetta il numero del segnale e l'ID processo come argomenti e invia il segnale a un determinato ID processo utilizzando il nome del segnale.

Questo script serve a dimostrare l'uso dell'istruzione case.

$ 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

Nell'esempio sopra:

  • $1 e $2 sono rispettivamente il numero del segnale e l'ID del processo.
  • Usando il comando kill, invia il segnale corrispondente all'id di processo fornito.
  • Esegue il comando sleep per alcuni secondi.
  • L'ultimo confronto facoltativo *) è un caso predefinito e corrisponde a qualsiasi cosa.

Utilizzo dello script di shell sopra:scopri l'id di processo del comando sleep e invia il segnale di kill a quell'id di processo per terminare il processo.

$ sleep 1000

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

$ ./signal.sh 9 23277
Sending SIGKILL signal

$ sleep 1000
Killed

Inoltre, fai riferimento al nostro precedente articolo kill:4 metodi per terminare un processo.

Esempio di caso Bash. 2. Pattern Match in un file

Questo esempio stampa il numero di righe, il numero di parole ed elimina le righe che corrispondono allo schema dato.

$ 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

L'esecuzione dello script precedente è mostrata di seguito.

$ 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.

Output regex di bash case. Dopo aver cancellato le linee, corrisponde al pattern Vim:

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

Inoltre, fai riferimento al nostro precedente articolo su Bash ~ espansione e { } espansione.

Esempio caso Bash 3. Trova il tipo di file dall'estensione

Questo esempio stampa il tipo di file (testo, Csource, ecc.) in base all'estensione del nome del file.

$ 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

Esempio caso Bash 4. Richiedi all'utente Sì o No

Nella maggior parte dell'installazione del software, durante il contratto di licenza, verrà chiesto sì o no input dall'utente. Il seguente frammento di codice è uno dei modi per ottenere l'input sì o no dall'utente.

$ 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

Se sono presenti diversi modelli separati da caratteri pipe, l'espressione può corrispondere a uno qualsiasi di essi per eseguire le istruzioni associate. I modelli vengono controllati in ordine finché non viene trovata una corrispondenza; se non viene trovato, non succede nulla.

Inoltre, fai riferimento al nostro precedente articolo sui 15 esempi di array bash.

Esempio di caso Bash 5. Script di avvio

Gli script di avvio nella directory /etc/init.d utilizzano l'istruzione case per avviare e arrestare l'applicazione.

Puoi usare qualsiasi tipo di pattern, ma è sempre consigliato usare l'istruzione case, quando stai testando i valori delle primitive. (es. numeri interi o caratteri).

$ 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

Lettura consigliata

Bash 101 Hacks, di Ramesh Natarajan . Passo la maggior parte del mio tempo in ambiente Linux. Quindi, naturalmente sono un grande fan della riga di comando di Bash e degli script di shell. 15 anni fa, quando stavo lavorando su diverse versioni di *nix, scrivevo molto codice sulla shell C e sulla shell Korn. Negli anni successivi, quando ho iniziato a lavorare su Linux come amministratore di sistema, ho praticamente automatizzato ogni possibile attività utilizzando lo scripting della shell Bash. Sulla base della mia esperienza con Bash, ho scritto l'eBook Bash 101 Hacks che contiene 101 esempi pratici sia sulla riga di comando di Bash che sugli script di shell. Se stavi pensando di padroneggiare Bash, fatti un favore e leggi questo libro, che ti aiuterà a prendere il controllo della tua riga di comando di Bash e degli script della shell.


Linux
  1. Utilizzo delle istruzioni Case in Bash

  2. Bash Istruzione If-Else con esempi

  3. 4 Esempi di istruzioni Awk If ( if, if else, if else if, :? )

  4. 6 Esempi di espressioni condizionali Bash ( -e, -eq, -z, !=, [, [[ ..)

  5. 4 Esempi di istruzioni Bash If ( If then fi, If then else fi, If elif else fi, Nested if )

Dichiarazione del caso Bash

Bash if..else Statement

35 Esempi di script Bash

Bash Scripting – Case Statement

Come lavorare con l'istruzione Case negli script Bash

Bash If Else Sintassi con esempi