fatmawati achmad zaenuri/Shutterstock Utilizzare l’istruzione if di Linux Bash per creare espressioni condizionali con un if then fi struttura. Aggiungere elif parole chiave per ulteriori espressioni condizionali o il else parola chiave 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 allo script Linux di porre domande e, a seconda della risposta, eseguire diverse sezioni di codice. Ecco come funzionano.
Cos’è l’esecuzione condizionale? In tutto tranne il più banale Script bash, in genere è necessario che il flusso di esecuzione prenda un percorso diverso attraverso lo script, in base all’esito di una decisione. Questa è chiamata esecuzione condizionale.
Un modo per decidere quale ramo di esecuzione prendere è usare un if dichiarazione. Potresti sentire if dichiarazioni chiamate if then dichiarazioni, o if then else dichiarazioni. Sono nomi diversi per la stessa cosa.
IL if affermazione dice che se qualcosa è vero, allora fallo Questo. Ma se qualcosa è falso, fallo Quello Invece. Il “qualcosa” può essere molte cose, come il valore di una variabile, la presenza di un fileo 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.
IL if istruzione è probabilmente il mezzo più frequentemente utilizzato per ottenere l’esecuzione condizionale. Ecco come usarlo negli script di Bash.
IMPARENTATO: Come verificare se un file esiste negli script Bash di Linux
Un semplice esempio di istruzione If Questa è la forma canonica del più semplice if dichiarazione:
if [ this-condition-is-true ] then execute-these-statements fi Se la condizione all’interno del testo si risolve in true, le righe di script nel file then clausola vengono eseguite. Se stai esaminando gli script scritti da altri, potresti vedere il file if dichiarazione scritta così:
if [ this-condition-is-true ]; then execute-these-statements fi Alcuni punti da notare:
IL if dichiarazione si conclude per iscritto fi. Ci deve essere uno spazio Dopo la prima parentesi” [ ” E Prima la seconda parentesi” ] ” del test condizionale. Se hai intenzione di mettere il then parola chiave sulla stessa riga del test condizionale, assicurati di utilizzare un punto e virgola ” ; ” dopo il test. Possiamo aggiungere un optional else clausola per far eseguire del codice se il test della condizione si rivela falso. IL else la clausola non ha bisogno di a then parola chiave.
if [ this-condition-is-true ] then execute-these-statements else execute-these-statements-instead fi Questo script mostra un semplice esempio di un file if affermazione che utilizza un else clausola. Il test condizionale verifica se l’età del cliente è maggiore o uguale a 21 anni. Se lo è, il cliente può entrare nel locale e il then clausola viene eseguita. Se non sono abbastanza grandi, il else la clausola viene eseguita e non sono ammessi.
#!/bin/bash customer_age=25 if [ $customer_age -ge 21 ] then echo “Come on in.” else echo “You can’t come in.” fi Copia lo script dall’alto in un editor, salvalo come file chiamato “if-age.sh” e usa IL chmod comando per renderlo eseguibile. Dovrai farlo con ciascuno degli script di cui discutiamo.
chmod +x if-age.sh
Eseguiamo il nostro script.
./if-age.sh
Ora modificheremo il file e utilizzeremo un’età inferiore a 21 anni.
customer_age=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-age.sh
La clausola elif IL elif clausola aggiunge ulteriori test condizionali. Puoi averne tanti elif clausole come preferisci. Vengono valutati a turno finché uno di essi non risulta essere vero. Se nessuno dei elif i test condizionali si dimostrano veritieri, il else clausola, se presente, viene eseguita.
Questo script chiede un numero e poi ti dice se è pari o dispari. Lo zero è un numero pariquindi 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 “Enter a number: ” read number if [ $number -eq 0 ] then echo “You entered zero. Zero is an even number.” elif [ $(($number % 2)) -eq 0 ] then echo “You entered $number. It is an even number.” else echo “You entered $number. It is an odd number.” 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 IL parentesi ” [] ” che abbiamo usato per i nostri test condizionali sono un modo abbreviato di chiamare il test programma. Per questo motivo, tutti i confronti e i test che test i supporti sono a tua disposizione if dichiarazione.
Questo è solo alcuni di loro:
! espressione: Vero se l’espressione è falsa. -n stringa: True se la lunghezza della stringa è maggiore di zero. -z stringa: True se la lunghezza della stringa è zero. Cioè, è una stringa vuota. stringa1 = stringa2: True se string1 è uguale a string2. stringa1 != stringa2: Vero se string1 non è uguale a string2. intero1 -eq intero2: True se integer1 è numericamente uguale a integer2 intero1 -qt intero2: True se integer1 è numericamente maggiore di integer2 intero1 -lt intero2: True se integer1 è numericamente minore di integer2 directory -d: 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. -xfile: 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 uguale “=” e il test di uguaglianza -eq Sono non lo stesso. Il segno uguale esegue a carattere per carattere confronto testuale. Il test di uguaglianza esegue a numerico confronto.
Possiamo vederlo usando il test programma sulla riga di comando.
test “this string” = “this string” test “this string” = “that string” test 1 = 001 test 1 -eq 001 In ogni caso, usiamo IL echo comando per stampare il codice di ritorno dell’ultimo comando. Zero significa vero, uno significa falso.
Usando il segno di uguale ” = ” ci dà una risposta falsa confrontando 1 con 001. Esatto, perché sono due diverse stringhe di caratteri. Numericamente hanno lo stesso valore, uno, quindi il -eq L’operatore restituisce una risposta vera.
Se desideri utilizzare la corrispondenza con caratteri jolly nel test condizionale, utilizza la doppia parentesi ” [[ ]] ” sintassi.
#!/bin/bash if [[ $USER == *ve ]] then echo “Hello $USER” else echo “$USER does not end in ‘ve'” fi Questo script controlla il nome dell’account dell’utente corrente. Se finisce in “ve“, stampa il nome utente. Se non finisce in ” ve “, te lo dice la sceneggiatura, e finisce.
./if-wild.sh
IMPARENTATO: Test condizionale in Bash: if, then, else, elif
Istruzioni If nidificate Puoi mettere un if dichiarazione all’interno di un’altra if dichiarazione.
Questo è perfettamente accettabile, ma annidamento if dichiarazioni rendono il codice meno facile da leggere e più difficile da mantenere. Se ti ritrovi a nidificare più di due o tre livelli di if istruzioni, 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, il nidificato if dichiarazione fa un secondo test. Se il giorno è mercoledì, ci dice che è aperto solo la mattina.
#!/bin/bash # get the day as a number 1..7 day=$(date +”%u”) if [ $day -le 6 ] then ## the shop is open if [ $day -eq 3 ] then # Wednesday is half-day echo “On Wednesdays we open in the morning only.” else # regular week days and Saturday echo “We’re open all day.” fi else # not open on Sundays echo “It’s Sunday, we’re closed.” fi Copia questo script in un editor, salvalo come file chiamato “if-shop.sh” e rendilo eseguibile usando il chmod comando.
Abbiamo eseguito la sceneggiatura una volta e poi cambiato l’orologio del computer doveva essere un mercoledì e ho ripetuto la sceneggiatura. Abbiamo quindi cambiato il giorno in una domenica e l’abbiamo eseguito ancora una volta.
./if-shop.sh ./if-shop.sh ./if-shop.sh
IMPARENTATO: 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 agli umili 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. IL if la dichiarazione è fantastica, ma non lasciare che sia l’unico strumento nella tua borsa. In particolare, controlla il case dichiarazione che può essere una soluzione in alcuni scenari.
IMPARENTATO: Come utilizzare le istruzioni Case negli script Bash