Come utilizzare le istruzioni Bash If (con 4 esempi)

Pubblicato: 2023-05-08
Laptop Linux che mostra una finestra terminale con un motivo a globo sullo sfondo e una filigrana binaria
fatmawati achmad zaenuri/Shutterstock
Utilizzare l'istruzione if di Linux Bash per creare espressioni condizionali con una struttura 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.

9 Esempi di cicli for negli script Bash di Linux
CORRELATI 9 Esempi di cicli for negli script Bash di Linux

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 scrivendo fi .
  • 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 

Utilizzo di chmod per rendere eseguibile uno script

Eseguiamo il nostro script.

 ./if-età.sh 

Eseguire lo script if-age.sh con la variabile age impostata su 25

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 

Eseguire lo script if-age.sh con la variabile age impostata su 18

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 

Esecuzione dello script if-even.sh con vari input

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.

Utilizzo del programma di test sulla riga di comando per testare diversi confronti

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 

Esecuzione dello script if-wild.sh che mostra la ricerca con caratteri jolly nel test condizionale dell'istruzione if

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 

Eseguire lo script if-shop.sh con l'orologio del computer impostato su un giorno della settimana, quindi un mercoledì, quindi una domenica

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