Come utilizzare le istruzioni Bash If (con 4 esempi)
Pubblicato: 2023-05-08if
then
fi
. Aggiungi le parole chiave elif
per ulteriori espressioni condizionali o la parola chiave else
per definire una sezione di codice catch-all che viene eseguita se non è stata eseguita alcuna clausola condizionale precedente.Tutti gli script Bash non banali devono prendere decisioni. L'istruzione Bash if consente al tuo script Linux di porre domande e, a seconda della risposta, eseguire diverse sezioni di codice. Ecco come funzionano.
Cos'è l'esecuzione condizionale?
In tutti gli script Bash, tranne il più banale, di solito è necessario che il flusso di esecuzione prenda un percorso diverso attraverso lo script, a seconda del risultato di una decisione. Questa è chiamata esecuzione condizionale.
Un modo per decidere quale ramo di esecuzione prendere è usare un'istruzione if
. Potresti sentire le istruzioni if
chiamate istruzioni if then
o if then else
. Sono nomi diversi per la stessa cosa.
L'istruzione if
dice che se qualcosa è vero, allora fai questo . Ma se qualcosa è falso, fallo invece. Il "qualcosa" può essere molte cose, come il valore di una variabile, la presenza di un file o se due stringhe corrispondono.
L'esecuzione condizionale è vitale per qualsiasi script significativo. Senza di esso, sei molto limitato in ciò che puoi far fare al tuo script. A meno che non possa prendere decisioni significative, non sarai in grado di prendere problemi del mondo reale e produrre soluzioni praticabili.
L'istruzione if
è probabilmente il mezzo più utilizzato per ottenere l'esecuzione condizionale. Ecco come usarlo negli script di Bash.
CORRELATO: Come verificare se un file esiste negli script Bash di Linux
Un semplice esempio di istruzione If
Questa è la forma canonica dell'istruzione if
più semplice:
se [questa-condizione-è-vera] Poi eseguire-queste-istruzioni fi
Se la condizione all'interno del testo si risolve in true, vengono eseguite le righe di script nella clausola then
. Se stai esaminando gli script scritti da altri, potresti vedere l'istruzione if
scritta in questo modo:
if [questa-condizione-è-vera]; Poi eseguire-queste-istruzioni fi
Alcuni punti da notare:
- L'istruzione
if
si conclude scrivendofi
. - Ci deve essere uno spazio dopo la prima parentesi ”
[
” e prima della seconda parentesi ”]
” del test condizionale. - Se hai intenzione di inserire la parola chiave
then
sulla stessa riga del test condizionale, assicurati di utilizzare un punto e virgola ”;
” dopo il test.
Possiamo aggiungere una clausola else
facoltativa per far eseguire del codice se il test della condizione si rivela falso. La clausola else
non ha bisogno di una parola chiave then
.
se [questa-condizione-è-vera] Poi eseguire-queste-istruzioni altro esegui-queste-dichiarazioni-invece fi
Questo script mostra un semplice esempio di un'istruzione if
che utilizza una clausola else
. Il test condizionale controlla se l'età del cliente è maggiore o uguale a 21. Se lo è, il cliente può entrare nei locali e viene eseguita la clausola then
. Se non sono abbastanza grandi, viene eseguita la clausola else
e non sono ammessi.
#!/bin/bash cliente_età=25 if [ $customer_age -ge 21 ] Poi echo "Vieni dentro." altro echo "Non puoi entrare." fi
Copia lo script dall'alto in un editor, salvalo come file chiamato "if-age.sh" e usa il comando chmod
per renderlo eseguibile. Dovrai farlo con ciascuno degli script di cui discutiamo.
chmod +x if-age.sh
Eseguiamo il nostro script.
./if-età.sh
Ora modificheremo il file e utilizzeremo un'età inferiore a 21 anni.
età_cliente=18
Apporta questa modifica al tuo script e salva le modifiche. Se lo eseguiamo ora, la condizione restituisce false e viene eseguita la clausola else.
./if-età.sh
La clausola elif
La clausola elif
aggiunge ulteriori test condizionali. Puoi avere tutte le clausole elif
che desideri. Vengono valutati a turno finché uno di essi non risulta essere vero. Se nessuno dei test condizionali elif
risulta essere vero, viene eseguita la clausola else
, se presente.
Questo script chiede un numero e poi ti dice se è pari o dispari. Zero è un numero pari, quindi non abbiamo bisogno di testare nulla.
Tutti gli altri numeri vengono testati trovando il modulo di una divisione per due. Nel nostro caso, il modulo è la parte frazionaria del risultato di una divisione per due. Se non c'è la parte frazionaria, il numero è divisibile per due, esattamente. Quindi è un numero pari.
#!/bin/bash echo -n "Inserisci un numero: " leggere numero if [ $numero -eq 0 ] Poi echo "Hai inserito zero. Zero è un numero pari." elif [ $(($numero % 2)) -eq 0 ] Poi echo "Hai inserito $numero. È un numero pari." altro echo "Hai inserito $numero. È un numero dispari." fi
Per eseguire questo script, copialo in un editor e salvalo come "if-even.sh", quindi usa chmod per renderlo eseguibile.
Eseguiamo lo script alcune volte e controlliamo il suo output.
./if-even.sh
Funziona tutto bene.
Diverse forme di test condizionale
Le parentesi " []
" che abbiamo usato per i nostri test condizionali sono un modo abbreviato di chiamare il programma test
. Per questo motivo, tutti i confronti e i test supportati dai test
sono disponibili per la tua istruzione if
.
Questo è solo alcuni di loro:
- ! espressione : True se l'espressione è falsa.
- -n string : True se la lunghezza della stringa è maggiore di zero.
- -z string : True se la lunghezza della stringa è zero. Cioè, è una stringa vuota.
- string1 = string2 : Vero se string1 è uguale a string2.
- string1 != string2 : Vero se string1 non è uguale a string2.
- integer1 -eq integer2 : True se integer1 è numericamente uguale a integer2
- integer1 -qt integer2 : True se integer1 è numericamente maggiore di integer2
- integer1 -lt integer2 : Vero se integer1 è numericamente minore di integer2
- -d directory : True se la directory esiste.
- -e file : True se il file esiste.
- -s file : True se il file esiste con una dimensione maggiore di zero.
- -r file : True se il file esiste e il permesso di lettura è impostato.
- -w file : True se il file esiste e il permesso di scrittura è impostato.
- -x file : True se il file esiste e il permesso di esecuzione è impostato.
Nella tabella, "file" e "directory" possono includere percorsi di directory, relativi o assoluti.
Il segno di uguale " =
" e il test di uguaglianza -eq
non sono la stessa cosa. Il segno di uguale esegue un confronto di testo carattere per carattere . Il test di uguaglianza esegue un confronto numerico .
Possiamo vederlo usando il programma test
sulla riga di comando.
test "questa stringa" = "questa stringa"
test "questa stringa" = "quella stringa"
prova 1 = 001
test 1 -eq 001
In ogni caso, usiamo il comando echo
per stampare il codice di ritorno dell'ultimo comando. Zero significa vero, uno significa falso.
L'uso del segno di uguale " =
" ci dà una risposta falsa confrontando 1 con 001. Esatto, perché sono due stringhe di caratteri diverse. Numericamente hanno lo stesso valore, uno, quindi l'operatore -eq
restituisce una risposta vera.
Se si desidera utilizzare la corrispondenza con caratteri jolly nel test condizionale, utilizzare la sintassi doppia parentesi ” [[ ]]
”.
#!/bin/bash if [[ $USER == *ve ]] Poi echo "Ciao $USER" altro echo "$USER non termina in 've'" fi
Questo script controlla il nome dell'account dell'utente corrente. Se termina con " ve
", stampa il nome utente. Se non finisce in " ve
", te lo dice il copione, e finisce.
./if-wild.sh
CORRELATO: Test condizionale in Bash: if, then, else, elif
Istruzioni If nidificate
Puoi inserire un'istruzione if
all'interno di un'altra istruzione if
.
Questo è perfettamente accettabile, ma l'annidamento delle istruzioni if
rende il codice meno facile da leggere e più difficile da mantenere. Se ti ritrovi a nidificare più di due o tre livelli di istruzioni if
, probabilmente dovrai riorganizzare la logica del tuo script.
Ecco uno script che ottiene il giorno come un numero, da uno a sette. Uno è lunedì, sette è domenica.
Ci dice gli orari di apertura di un negozio. Se è un giorno feriale o sabato, segnala che il negozio è aperto. Se è domenica segnala che il negozio è chiuso.
Se il negozio è aperto, l'istruzione if
nidificata esegue un secondo test. Se il giorno è mercoledì, ci dice che è aperto solo la mattina.
#!/bin/bash # ottieni il giorno come numero 1..7 giorno=$(data +"%u") se [ $giorno -le 6 ] Poi ## il negozio è aperto se [ $giorno -eq 3 ] Poi # Mercoledì è mezza giornata echo "Il mercoledì apriamo solo la mattina." altro # giorni della settimana regolari e sabato echo "Siamo aperti tutto il giorno." fi altro # non aperto la domenica echo "È domenica, siamo chiusi." fi
Copia questo script in un editor, salvalo come file chiamato "if-shop.sh" e rendilo eseguibile usando il comando chmod
.
Abbiamo eseguito lo script una volta, quindi abbiamo cambiato l'orologio del computer in modo che fosse un mercoledì e abbiamo eseguito nuovamente lo script. Abbiamo quindi cambiato il giorno in una domenica e l'abbiamo eseguito ancora una volta.
./if-negozio.sh
./if-negozio.sh
./if-negozio.sh
CORRELATO: Come utilizzare i test condizionali a doppia parentesi in Linux
Il caso Per se
L'esecuzione condizionale è ciò che dà potere alla programmazione e allo scripting, e l'umile istruzione if
potrebbe essere il modo più comunemente usato per cambiare il percorso di esecuzione all'interno del codice. Ma questo non significa che sia sempre la risposta.
Scrivere un buon codice significa sapere quali opzioni si hanno e quali sono le migliori da utilizzare per risolvere un particolare requisito. L'affermazione if
è fantastica, ma non lasciare che sia l'unico strumento nella tua borsa. In particolare, controlla l'istruzione case
che può essere una soluzione in alcuni scenari.
CORRELATO: Come utilizzare le istruzioni Case negli script Bash