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.
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 seSTRING1eSTRING2sono uguali. -
STRING1 != STRING2– True seSTRING1eSTRING2non sono uguali., -
INTEGER1 -eq INTEGER2– True ifINTEGER1andINTEGER2are equal. -
INTEGER1 -gt INTEGER2– True ifINTEGER1is greater thanINTEGER2. -
INTEGER1 -lt INTEGER2– True ifINTEGER1is less thanINTEGER2. -
INTEGER1 -ge INTEGER2– True ifINTEGER1is equal or greater than INTEGER2. -
INTEGER1 -le INTEGER2– True ifINTEGER1is equal or less thanINTEGER2., -
-hFILE– True if theFILEexists and is a symbolic link. -
-rFILE– True if theFILEexists and is readable. -
-wFILE– True if theFILEexists and is writable. -
-xFILE– True if theFILEexists and is executable., -
-dFILE– True seFILEesiste ed è una directory. -
-eFILE– True seFILEesiste ed è un file, indipendentemente dal tipo (nodo, directory, socket, ecc.). -
-fFILE– True seFILEesiste 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.