Introduzione
Il case
bash istruzione è la forma più semplice dell'istruzione condizionale if elif else. Il case
istruzione semplifica condizioni complesse con più scelte diverse. Questa istruzione è più facile da mantenere e più leggibile rispetto a if
annidato dichiarazioni.
Il case
l'istruzione verifica il valore di input finché non trova il modello corrispondente ed esegue il comando collegato a quel valore di input. Pertanto, è una scelta eccellente per la creazione di menu in cui gli utenti selezionano un'opzione che attiva un'azione corrispondente.
In questo tutorial imparerai il case
bash dichiarazione nozioni di base e come usarlo negli script di shell.
Prerequisiti
- Una macchina che esegue Linux.
- Accesso alla riga di comando.
- Un editor di testo come vi/vim.
Sintassi dell'istruzione del caso Bash
Il case
bash istruzione prende la seguente sintassi:
case $variable in
pattern-1)
commands;;
pattern-2)
commands;;
pattern-3)
commands;;
pattern-N)
commands;;
*)
commands;;
esac
Il case
l'istruzione inizia con il case
parola chiave seguita dalla $variable
e il in
parola chiave. L'istruzione termina con il case
parola chiave indietro - esac
.
$variable
- Lo script confronta l'input
$variable
contro gli schemi in ogni clausola finché non trova una corrispondenza.
Modelli
- Un pattern e i suoi comandi formano una clausola , che termina con
;;
. - I motivi supportano i caratteri speciali.
- Il
)
l'operatore termina un elenco di modelli. - Il
|
l'operatore separa più pattern. - Lo script esegue i comandi corrispondenti al primo pattern che corrisponde all'input
$variable
. - L'asterisco
*
il simbolo definisce il caso predefinito, di solito nel modello finale.
Stato di uscita
Lo script ha due stati di uscita:
- 0 . Lo stato di ritorno quando l'input non corrisponde a nessun modello.
- Stato comando eseguito . Se il comando fa corrispondere la variabile di input a un pattern, viene restituito lo stato di uscita del comando eseguito.
Esempi di dichiarazioni di casi Bash
Questa sezione mostra esempi pratici di utilizzo di bash case
dichiarazione.
Esempio 1:output di una descrizione per ciascuna opzione
L'esempio seguente è uno script che consente all'utente di scegliere un colore e mostra un commento corrispondente all'input utilizzando il comando echo.
Segui le istruzioni seguenti:
1. Apri il terminale (Ctrl + Alt + T ) e creare lo script:
vi color.sh
2. Aggiungi le seguenti righe allo 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
Ciascuna delle linee ha il ruolo seguente:
- La prima riga di ogni script è in genere shebang (
#!
), che indica al sistema operativo quale interprete utilizzare per analizzare il file. - Le righe 2-7 sono il menu delle opzioni presentato all'utente tra cui scegliere.
- Il
read color;
La variabile richiede all'utente una risposta e la memorizza. - Il
case
contiene le possibili risposte che corrispondono all'input dell'utente. In questo esempio, l'output èecho
output del comando. - L'ultima riga,
esac
, chiude ilcase
dichiarazione.
3. Salvare lo script ed uscire da vi con il seguente comando:
:wq
4. Prima di eseguire ogni script, assicurati di chmod per renderlo eseguibile:
chmod +x color.sh
5. Esegui lo script:
./color.sh
Lo script offre il menu delle opzioni e genera un messaggio diverso a seconda dell'opzione selezionata.
Esempio 2:utilizzo di più ricami
Il case
istruzione consente di utilizzare più modelli in ogni clausola. Se l'espressione corrisponde ai modelli specificati, lo script esegue i comandi in quella clausola.
Questo script di esempio richiede all'utente di inserire un mese e restituisce il numero di giorni. Ci sono tre possibili risposte:
- 30 giorni.
- 31 giorni.
- 28 o 29 giorni per febbraio.
Segui i passaggi seguenti per creare lo script:
1. Crea lo script month.sh eseguendo:
vi month.sh
2. Immettere le seguenti righe e salvare lo 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
Nell'esempio sopra:
- Il
shopt
comando con il-s nocasematch
l'opzione riduce la possibilità di errore con il criterio di corrispondenza senza distinzione tra maiuscole e minuscole. - Il simbolo della pipa
|
separa i modelli in ciascuna delle clausole.
3. Rendi eseguibile lo script:
chmod +x month.sh
4. Esegui lo script:
./month.sh
Lo script ignora le differenze tra maiuscole e minuscole e restituisce il numero corretto di giorni nel mese selezionato.
Esempio 3:per i loop
Usa un for
loop in case
dichiarazioni quando ci sono molte espressioni da elaborare. Lo script seguente restituisce tutti i tipi di file da una directory.
Segui i passaggi seguenti:
1. Crea lo script della shell:
vi filelist.sh
2. Immettere le seguenti righe e quindi salvare lo 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
Nell'esempio sopra:
- Le l comando estrae un elenco di file dalla directory.
- Il
for
loop applica il globbing dei file per estrarre l'estensione di ogni file.
3. Rendi eseguibile lo script:
chmod +x filelist.sh
4. Esegui lo script:
./filelist.sh
Lo script identifica ogni tipo di file presente nella directory corrente.
Esempio 4:creare una rubrica
Usa il case
dichiarazione per creare un semplice database e generare rapidamente le informazioni richieste. L'esempio seguente restituisce il nome, l'indirizzo e-mail e l'indirizzo della persona selezionata:
1. Crea lo script:
vi phonebook.sh
2. Aggiungi le seguenti righe e salva lo 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. Modifica lo script:
chmod +x phonebook.sh
3. Esegui lo script:
./phonebook.sh
Lo script restituisce i dettagli di contatto per la persona selezionata. La selezione di un'opzione non elencata notifica all'utente che il contatto non esiste.
Esempio 5:verifica del tipo di carattere
L'esempio seguente mostra come utilizzare il case
istruzione per verificare quale tipo di carattere è stato inserito dall'utente.
Segui i passaggi seguenti:
1. Crea lo script:
vi character.sh
2. Aggiungi le seguenti righe e salva lo 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
Nell'esempio sopra:
- Il
$var
la variabile di controllo memorizza l'input. - Invece di digitare tutte le possibili combinazioni da confrontare, usa le parentesi quadre
[]
per denotare un intervallo di caratteri. Usa parentesi quadre doppie[[]]
per le gamme POSIX.if-else
richiede l'inserimento di ogni condizione carattere individualmente. - Il
?
il carattere copre i caratteri che non sono minuscoli, maiuscoli o cifre. Sostituisce un solo carattere, al contrario di*
che sostituisce tutto quanto non coperto dalle condizioni di cui sopra.
3. Modifica le autorizzazioni per rendere eseguibile lo script:
chmod +x character.sh
4. Esegui lo script:
./character.sh
L'output indica il tipo di carattere immesso dopo averlo confrontato con le condizioni specificate.