GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Scripting – Dichiarazioni condizionali

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:

  1. 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.
  2. O [[ ]] o [ ] dovrebbe essere utilizzato per valutare la condizione. Se la condizione viene valutata su "True" , verrà eseguito un blocco di codice.
  3. 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.
  4. Se tutti i if o elif il blocco viene valutato come falso quindi il blocco di codice da "else" la clausola verrà eseguita.
  5. 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 e else 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

Linux
  1. Come verificare se esiste un file o una directory in Bash

  2. Bash:Scrivi su file

  3. Script Bash(I)

  4. Il Bash '?

  5. Impossibile eseguire script bash anche come root?

Scripting Bash:come leggere i dati dai file di testo

Script Bash(II)

Scripting Bash(III)

Dichiarazioni di Bash If-Else:tutto ciò che devi sapere

Bash Beginner Series #5:Utilizzo di operatori aritmetici negli script Bash

Comprendere Bash If Else e altre dichiarazioni condizionali