In questo tutorial, vi guideremo attraverso le basi della Bash if dichiarazione e vi mostrerà come usarlo nei vostri script di shell.

Il processo decisionale è uno dei concetti fondamentali della programmazione di computer. Come in qualsiasi altro linguaggio di programmazione,if,if..else,if..elif..else e nidificatoif istruzioni in Bash possono essere utilizzati per eseguire il codice in base a una certa condizione.,

if Statement #

Bashif condizionali possono avere forme diverse. La maggior parte di base if dichiarazione assume la seguente forma:

if TEST-COMMANDthen STATEMENTSfi

if dichiarazione inizia con il tag if parola chiave seguita dall’espressione condizionale e il then parola chiave. L’istruzione termina con la parola chiave fi.,

Se TEST-COMMAND restituisce True, STATEMENTS viene eseguito. SeTEST-COMMAND restituisceFalse, non succede nulla, ilSTATEMENTS viene ignorato.

In generale, è buona norma indentare sempre il codice e separare i blocchi di codice con righe vuote. La maggior parte delle persone sceglie di utilizzare il rientro a 4 o 2 spazi. Le rientranze e le righe vuote rendono il codice più leggibile e organizzato.,

vediamo il seguente esempio di script che controlla se un dato numero è maggiore di 10:

#!/bin/bashecho -n "Enter a number: "read VARif ]then echo "The variable is greater than 10."fi

Salvare il codice in un file ed eseguirlo da riga di comando:

bash test.sh

Lo script vi chiederà di inserire un numero. Se, ad esempio, si immette 15, il comando test valuterà true perché 15 è maggiore di 10 e verrà eseguito il comando echo all’interno della clausola then.

The variable is greater than 10.

se..,else, #

Bash if..else dichiarazione assume la seguente forma:

if TEST-COMMANDthen STATEMENTS1else STATEMENTS2fi

Se TEST-COMMAND valuta True STATEMENTS1 verrà eseguito. In caso contrario, seTEST-COMMAND restituisceFalse, ilSTATEMENTS2 verrà eseguito. È possibile avere solo una clausolaelse nell’istruzione.,

Aggiungiamo una clausolaelse allo script di esempio precedente:

Se si esegue il codice e si immette un numero, lo script stamperà un messaggio diverso in base al fatto che il numero sia maggiore o minore / uguale a 10.

se..elif..else, #

Bash if..elif..else dichiarazione assume la seguente forma:

if TEST-COMMAND1then STATEMENTS1elif TEST-COMMAND2then STATEMENTS2else STATEMENTS3fi

Se TEST-COMMAND1 valuta True STATEMENTS1 verrà eseguito., SeTEST-COMMAND2 restituisceTrue, verrà eseguitoSTATEMENTS2. Se nessuno dei comandi di test viene valutato inTrue, viene eseguitoSTATEMENTS2.

È possibile avere una o più clausole elif nell’istruzione. La clausolaelse è facoltativa.

Le condizioni vengono valutate in sequenza., Una volta che una condizione restituisceTrue le condizioni rimanenti non vengono eseguite e il controllo del programma si sposta alla fine delle istruzioniif.

Aggiungiamo una clausolaelif allo script precedente:

Istruzioni if annidate #

Bash consente di annidareif istruzioni all’interno diif istruzioni. È possibile inserire più istruzioni if all’interno di un’altra istruzione if.,

Il seguente script ti chiederà di inserire tre numeri e stamperà il numero più grande tra i tre numeri.

Ecco come sarà l’output:

Enter the first number: 4Enter the second number: 7Enter the third number: 27 is the largest number.
Generalmente, è più efficiente utilizzare l’istruzione caseinvece di nidificare le istruzioni if.

Condizioni multiple #

Gli operatori logiciOR eAND consentono di utilizzare più condizioni nelle istruzioniif.,

Ecco un’altra versione dello script per stampare il numero più grande tra i tre numeri. In questa versione, invece delle istruzioni nidificate if, stiamo usando l’operatore logico AND (&&).

Test di Operatori #

In Bash, il test comando assume una delle seguenti forme di sintassi:

test EXPRESSION]

Per rendere lo script portatile, preferisco usare il vecchio test [ comando che è disponibile su tutte le shell POSIX., La nuova versione aggiornata del comandotest[[ (doppie parentesi) è supportata sulla maggior parte dei sistemi moderni che utilizzano Bash, Zsh e Ksh come shell predefinita.

Per negare l’espressione di test, utilizzare l’operatore logico NOT(!). Quando si confrontano le stringhe, utilizzare sempre virgolette singole o doppie per evitare problemi di divisione delle parole e globbing.,

Di seguito sono riportati alcuni degli operatori più comunemente utilizzati:

  • -nVAR – True se la lunghezza diVAR è maggiore di zero.
  • -zVAR – True se ilVAR è vuoto.
  • STRING1 = STRING2 – True seSTRING1eSTRING2 sono uguali.
  • STRING1 != STRING2 – True seSTRING1eSTRING2 non sono uguali.,
  • INTEGER1 -eq INTEGER2 – True if INTEGER1 and INTEGER2 are equal.
  • INTEGER1 -gt INTEGER2 – True if INTEGER1 is greater than INTEGER2.
  • INTEGER1 -lt INTEGER2 – True if INTEGER1 is less than INTEGER2.
  • INTEGER1 -ge INTEGER2 – True if INTEGER1 is equal or greater than INTEGER2.
  • INTEGER1 -le INTEGER2 – True if INTEGER1 is equal or less than INTEGER2.,
  • -h FILE – True if the FILE exists and is a symbolic link.
  • -r FILE – True if the FILE exists and is readable.
  • -w FILE – True if the FILE exists and is writable.
  • -x FILE – True if the FILE exists and is executable.,
  • -dFILE – True seFILE esiste ed è una directory.
  • -e FILE – True se FILE esiste ed è un file, indipendentemente dal tipo (nodo, directory, socket, ecc.).
  • -fFILE – True seFILE esiste ed è un file normale (non una directory o un dispositivo).,

Conclusione #

Le istruzioniif,if..else eif..elif..else consentono di controllare il flusso dell’esecuzione dello script Bash valutando determinate condizioni.