Come utilizzare la dichiarazione del caso bash

Come utilizzare la dichiarazione del caso bash

L'istruzione del caso viene generalmente utilizzata in bash quando si dispone di più scelte da selezionare. Usarlo invece di dichiarazioni If-Else nidificate aiuta a mantenere i tuoi script bash più facili da leggere e mantenere.

L'istruzione Bash Case è stata progettata in modo simile all'istruzione Case di JavaScript e C. A differenza dell'istruzione Switch di C, l'istruzione Case Bash interrompe la ricerca di altre partite non appena ne trova una e completa le dichiarazioni scritte per il modello.

In questa guida, spiegheremo come è possibile utilizzare l'istruzione Case Bash usando due esempi e alcuni scenari in Ubuntu 22.04.

Sintassi dell'istruzione Case

Se vuoi capire come utilizzare l'istruzione del caso, è necessario capire la sintassi. Sembra questo:

Caso $ variabile in
pattern1)
comandi
;;
pattern2)
comandi
;;
pattern)
comandi
;;
*)
comandi
;;
Esac

Abbattiamolo:

  • È imperativo aprire la dichiarazione con la parola chiave "caso" e chiuderla con la parola chiave "ESAC".
  • Usiamo la staffa di chiusura ")" per terminare uno schema.
  • I modelli contenenti comandi sono noti come clausole e finiscono con ";;".
  • È possibile utilizzare un "*" (asterisco) per definire un caso predefinito.
  • Quando il comando del caso corrisponde alla variabile di input con i pattern definiti, su una corrispondenza, il corrispondente set di codice dei comandi viene eseguito fino ai doppi punti e virgole.
  • Se si desidera eseguire lo stesso comando per più motivi, è possibile utilizzare l'operatore del tubo per mettere insieme i motivi come tali:
Caso $ variabile in
pattern1 | pattern2)
comandi
;;
pattern3 | pattern4)
comandi
;;

Ora, diamo un'occhiata a un paio di esempi per capire meglio questa sintassi.

Vacanze tra un mese

Per il nostro primo esempio, scriviamo uno script che richiede un mese come input dall'utente e risponde con una vacanza internazionale che cade nel mese. IL "Shopt -s Nocasematch"Il comando consente allo script di ignorare il caso dell'input e abbinarlo ai casi indipendentemente da ciò.

#!/Bin/Bash
#code per ignorare le restrizioni dei casi
Shopt -s Nocasematch
#Casa
Echo "Inserisci il nome di un mese"
Leggi il mese
Caso $ mese
Gennaio)
Echo "18 gennaio è il National Thesaurus Day"
;;
Febbraio)
Echo "il 20 febbraio è la Giornata mondiale della giustizia sociale"
;;
Marzo)
Echo "29 marzo è il piccolo vagone rosso."
;;
Aprile)
Echo "Il 1 ° aprile è il giorno di combattimento del cuscino internazionale"
;;
*)
echo "non sono riuscito a trovare nessuna vacanza nel mese specificato"
Esac

In questo script, prendiamo il nome di un mese dall'utente e lo memorizziamo in una variabile denominata "Mese". Quindi, utilizzando l'istruzione Case, confrontiamo l'input con alcuni mesi preselezionati e quindi visualizziamo le rispettive festività. Puoi vedere che se il codice non trova alcuna corrispondenza nei casi definiti, ha un'eco al di fuori dei casi per visualizzare un altro messaggio. E dopo ciò, chiudiamo la struttura del codice del caso con la parola chiave "ESAC".

Salva il file di script ed esci dall'editor Nano. Esegui lo script usando il seguente comando:

$ Bash Month.sh

Si può vedere che il codice ha risposto con la pertinente vacanza per l'input che è stato soddisfatto con i casi e ha risposto con sconosciuto quando l'input era fuori portata dai casi programmati.

La lingua ufficiale di un paese

Scriviamo uno script che utilizza i casi compositi. Per questo esempio, scriviamo una sceneggiatura che prende un paese e stampa la lingua ufficiale di quel paese.

#!/Bin/Bash
#code per ignorare le restrizioni dei casi
Shopt -s Nocasematch
#Casa
Echo "Entra in un paese:"
Leggi il paese
echo "La lingua ufficiale di $ country è"
Caso $ Paese in
America | Londra)
Echo "inglese"
;;
Brasile | Portogallo | Messico)
Echo "spagnolo"
;;
Cina | Singapore | Taiwan)
Echo "Mandarin"
;;
*)
Echo "sconosciuto"
;;
Esac

Dichiarazione del caso con numeri interi

Puoi anche creare i casi in cui devi abbinare anche i numeri interi. Creiamo uno script che prende l'input dagli utenti nell'intervallo 1-10, quindi visualizza se il numero è uniforme o dispari.

#!/Bin/Bash
#Casa
Echo "Immettere un numero da 1 a 10:"
Leggi num
Caso $ num in
"1" | "3" | "5" | "7" | "9")
Echo "Il tuo input è un numero dispari"
;;
"2" | "4" | "6" | "8" | "10")
Echo "Il tuo input è un numero pari"
;;
*)
Echo "Il tuo input è al di fuori dell'intervallo richiesto"
;;
Esac

L'esecuzione di questo script ti dà il seguente output:

Puoi anche testare con gli altri numeri.

Dichiarazione del caso con per loop

È possibile utilizzare l'istruzione Case all'interno dei per loops se si desidera controllare più valori di input rispetto ai casi impostati. Illustriamo questo caso scrivendo uno script che passa attraverso tutti i file nella directory corrente e visualizza il loro tipo di file.

#!/Bin/Bash
#per ogni file nella directory corrente
per file in $ (LS)
Fare
#Extract The File Extension
Extension = $ File ##*.
Caso "$ estensione" in
sh)
Echo "Bash Script File: $ File"
;;
PNG)
Echo "File di immagine PNG: $ file"
;;
TXT)
Echo "File di testo: $ file"
;;
*)
Echo "file sconosciuto"
;;
Esac
Fatto

L'esecuzione di questo script passa attraverso ogni file nell'active Directory corrente e lo visualizza insieme al suo tipo di file (solo i casi che abbiamo specificato). Come puoi vedere, quando esegui questo script che abbiamo un solo file nella directory corrente, lo visualizza insieme all'estensione.

Conclusione

Tornare al tuo codice più vecchio e capire quale linea fa può essere un compito molto ingombrante, soprattutto se è stato scritto da qualcun altro. Aggiungerlo è ancora più difficile. L'uso dell'istruzione Case negli script bash può rendere molto facile mantenerla leggibile attraverso la semplice sintassi.

Come dimostrato con gli esempi, puoi usarlo con stringhe, più stringhe, numeri interi e per loop, tra molti altri. Puoi anche gestire i codici di uscita per il tuo programma con dichiarazioni di casi. È molto versatile.

Se affronti qualche problema usando la dichiarazione del caso, sentiti libero di coinvolgerci e ti aiuteremo volentieri.