In questa guida impareremo l'uso delle istruzioni condizionali negli script Bash con esempi. Il processo decisionale è un passo importante nella programmazione. Potrebbe esserci una situazione in cui determinate condizioni devono essere soddisfatte e sulla base di ciò devi scrivere una logica. Questo è ciò che fa una dichiarazione condizionale. Le istruzioni condizionali consentono di scrivere logica e prendere decisioni. Il concetto che leggi qui sarà lo stesso per tutti i linguaggi di programmazione disponibili, ma con differenze sintattiche e di implementazione.
Sintassi dell'istruzione condizionale
L'elemento costitutivo dell'istruzione condizionale in bash è il seguente.
if [[ conditions ]] then code elif [[ conditions ]] then code else code fi
Spiegazione del codice:
- Le parole chiave
"if"
e"fi"
segnare l'inizio e la fine dell'istruzione condizionale. Ogni istruzione if deve essere seguita da"then"
parola chiave. - O
[[ ]]
o[ ]
dovrebbe essere utilizzato per valutare la condizione. Se la condizione viene valutata su "True" , verrà eseguito un blocco di codice. - Un'istruzione condizionale può avere una condizione if e più
elif
condizioni. Se una condizione viene valutata come vera, tutte le istruzioni condizionali successive vengono ignorate. - Se tutti i
if
oelif
il blocco viene valutato come falso quindi il blocco di codice da"else"
la clausola verrà eseguita. - Sebbene non ci siano regole di indentazione rigide, lascia 2 spazi per il blocco di codice che darà una migliore leggibilità.
Per valutare le condizioni bash ha un comando integrato chiamato "test"
. Le parentesi quadre sono le stesse del comando test, quindi puoi utilizzare il comando test o le parentesi quadre.
$ type -a test test is a shell builtin test is /usr/bin/test test is /bin/test
Ci sono un sacco di operatori supportati dal test
comando per valutare le condizioni e vedremo come utilizzare questi operatori nella prossima sezione. Per ottenere l'elenco degli operatori puoi eseguire uno dei seguenti comandi.
$ man test
$ help test
Operatori di test dei file
Gli operatori di test dei file possono essere utilizzati per lavorare con oggetti file o directory. Usando gli operatori di test dei file puoi convalidare se un determinato file o directory è presente o meno, un determinato oggetto è un file o una directory, che tipo di file hai a che fare, dimensione del file, ecc. Esegui il comando seguente e fai attenzione a la sezione dell'operatore di file.
$ man test

Non tutti gli operatori sono usati frequentemente, ma ti guiderò attraverso quelli più importanti.
Per verificare se un determinato file è presente o meno, usa il -e
bandiera. Qui sto controllando se il .bashrc
il file è presente nella mia home directory o meno.
if [[ -e /home/${USER}/.bashrc ]] then echo "File is present" else echo "File is not present" fi

Per verificare se una determinata directory è presente o meno, utilizzare il -d
bandiera. Qui sto controllando il desktop directory nella mia cartella home.
if [[ -d ~/Desktop/ ]] then echo "Directory is present" else echo "Directory is not present" fi

Per verificare se il file è di dimensione diversa da zero file, usa il -s
bandiera. Qui ho creato un file chiamato "zero_byte.txt"
e aggiunto del testo.
$ touch ~/Desktop/zero_byte.txt
$ echo "Writing something" >> ~/Desktop/zero_byte.txt
$ if [[ -s ~/Desktop/zero_byte.txt ]] then echo "File is not zero byte" else echo "File is zero byte" fi

Puoi usare !
simbolo con qualsiasi flag che invertirà il risultato. Sto usando lo stesso esempio di cui sopra ma con "!"
simbolo. Invertirà e stamperà il file come file a zero byte, anche se non lo è.
$ if [[ ! -s ~/Desktop/zero_byte.txt ]] then echo "File is not zero byte" else echo "File is zero byte" fi

Operatori di confronto di interi
Di seguito sono riportati gli operatori di confronto di interi che valuteranno rispetto a due numeri interi dati.
-eq => Integer X is equal to Integer Y -ne => Integer X is not equal to Integer Y -gt => Integer X is greater than Integer Y -ge => Integer X is greater than or equal to Integer Y -lt => Integer X is lesser than Integer Y -le => Integer X is lesser than or equal to Integer Y
Ogni comando bash restituisce un codice di uscita compreso tra 0-255 e useremo gli operatori di confronto intero per valutare i codici di uscita. Nell'esempio seguente, sto assegnando il codice di uscita di nvim comando a una variabile chiamata EXCODE e facendo il confronto intero. Poiché neovim non è disponibile, genererà il codice di uscita 127 (errore comando non trovato).
$ EXCODE=$(nvim;echo $?)
$ if [[ $EXCODE -eq 0 ]] then echo "nvim is available to use" elif [[ $EXCODE -eq 127 ]] then echo "Command not found, check if nvim is installed or not" else echo "Return code is other than 0 & 127. Check and fix the error" fi

Nell'esempio sopra, ho usato elif
dichiarazione per la prima affermazione in questo articolo. Prima il "if"
viene valutata la condizione per verificare se il codice di ritorno è zero, che restituisce false, quindi il controllo viene passato a elif
istruzione e la condizione viene valutata su true ed esegue il blocco di codice. Puoi aggiungere tanto elif
dichiarazione per valutare condizioni diverse.
Puoi anche valutare più condizioni in un unico if
o elif
istruzione utilizzando l'operatore logico AND, OR.
LOGICAL AND ⇒ && symbol => All the conditions should be evaluated to be true.
LOGICAL OR ⇒ || symbol => Anyone condition should be evaluated to be true.
Di seguito è riportato un esempio per un AND logico operatore in cui il numero intero memorizzato nelle variabili X e S sono valutati come vere .
$ X=10
$ Y=15
$ if [[ $X -eq 10 && $Y -eq 15 ]] then echo "ok to proceed" else echo "Not ok to proceed" fi

Di seguito è riportato l'esempio di un OR logico operatore dove variabile X è valutato come vero e variabile Y è valutato come falso .
$ X=10
$ Y=15
$ if [[ $X -eq 10 || $Y -eq 10 ]] then echo "ok to proceed" else echo "Not ok to proceed" fi

Dichiarazioni condizionali compatte
Se devi semplicemente scrivere un if
e else
dichiarazione quindi puoi usare il modo abbreviato. In modo abbreviato, non è necessario utilizzare if..then..else..fi
parole chiave. Puoi usare AND logico (&&
) e OR logico (||
) operatori.
[[ condition ]] && << run if condition is evaluated to true >> || << run if condition is evaluated to false >>
Dai un'occhiata all'esempio qui sotto. Sto cercando di verificare se il pacchetto neofetch è disponibile e se non disponibile prova ad installarlo.
$ which neofetch && echo "Neofetch already installed" || sudo apt install neofetch -y

Spiegazione del codice:
- Eseguirà il
"which neofetch"
comando e se il codice di ritorno è zero, qualsiasi cosa venga dopo&&
l'operatore verrà eseguito. - Se il codice di ritorno è superiore a zero (valutato come falso), qualunque cosa venga dopo
||
l'operatore verrà eseguito. - È simile a
if
eelse
dichiarazione. Il"If"
l'istruzione verrà eseguita solo se la condizione viene valutata come vera. In questo caso, è AND operatore. Allo stesso modo, la clausola else verrà eseguita solo quando"if"
la condizione viene valutata come falsa. In questo caso, è OR operatore. - Nella mia macchina neofetch è già installato, quindi il codice di uscita sarà zero. Eseguirà
echo
comando. Se il neofetch non è installato, eseguiràapt install
comando.
Di seguito è riportato un altro esempio in cui sto utilizzando l'operatore di test del file per verificare se un file è zero byte o meno.
$ [[ -s ~/.bashrc ]] && echo "Not a empty file" || echo "Empty file"

Operatori di confronto di stringhe
Come Intero e File operatori di test, abbiamo una serie di operatori per lavorare con le stringhe. Di seguito sono riportati gli importanti set di operatori di stringa.
-z => Check if string is NULL. -n => Check if string is not NULL. == => Check for string equality. != => Check for string inequality.
Per verificare se la stringa è NULL o non NULL, usa -z
e -n
bandiera. Sto usando la sintassi dell'istruzione condizionale compatta per valutare la condizione.
$ [[ -z "Howdy" ]] && echo "String is NULL" || echo "String is not NULL"
$ [[ -n "Howdy" ]] && echo "String is not NULL" || echo "String is NULL"

Per verificare se due stringhe sono uguali, usa ==
operatore. Le stringhe fanno distinzione tra maiuscole e minuscole, quindi è necessario eseguire il confronto tenendo presente questo punto.
$ X="Linux"
$ Y="Linux"
$ [[ $X == $Y ]] && echo "Equal" || echo "Not equal"

Per verificare se due stringhe non sono uguali, usa !=
operatore.
$ [[ $X != $Y ]] && echo "Not Equal" || echo "Equal"

Conclusione
In questo articolo, abbiamo visto come lavorare con le istruzioni condizionali in bash. Abbiamo anche visto come utilizzare gli operatori di test di file, interi e stringhe. Infine, abbiamo discusso come scrivere istruzioni condizionali compatte usando gli operatori logici AND e OR logici con esempi.
Per qualsiasi feedback o suggerimento, utilizza la sezione commenti e saremo felici di tornare indietro.
Guide agli script di Bash:
- Scripting Bash – Manipolazione di stringhe
- Scripting Bash – Spiegazione del comando Printf con esempi
- Scripting Bash:array indicizzato spiegato con esempi
- Scripting Bash:array associativo spiegato con esempi
- Scripting di Bash:il ciclo For viene spiegato con esempi
- Scripting Bash:spiegazione del ciclo While e Until con esempi
- Il reindirizzamento di Bash spiegato con esempi
- Scripting Bash:variabili spiegate con esempi
- Scripting Bash:funzioni spiegate con esempi
- Comando Bash Echo spiegato con esempi in Linux
- Tutorial Bash Heredoc per principianti