Come utilizzare le istruzioni Bash If (con 4 esempi)
Pubblicato: 2023-05-08
if 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
ifsi 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
thensulla 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

