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.
case
invece 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:
-
-n
VAR
– True se la lunghezza diVAR
è maggiore di zero. -
-z
VAR
– True se ilVAR
è vuoto. -
STRING1 = STRING2
– True seSTRING1
eSTRING2
sono uguali. -
STRING1 != STRING2
– True seSTRING1
eSTRING2
non sono uguali., -
INTEGER1 -eq INTEGER2
– True ifINTEGER1
andINTEGER2
are equal. -
INTEGER1 -gt INTEGER2
– True ifINTEGER1
is greater thanINTEGER2
. -
INTEGER1 -lt INTEGER2
– True ifINTEGER1
is less thanINTEGER2
. -
INTEGER1 -ge INTEGER2
– True ifINTEGER1
is equal or greater than INTEGER2. -
INTEGER1 -le INTEGER2
– True ifINTEGER1
is equal or less thanINTEGER2
., -
-h
FILE
– True if theFILE
exists and is a symbolic link. -
-r
FILE
– True if theFILE
exists and is readable. -
-w
FILE
– True if theFILE
exists and is writable. -
-x
FILE
– True if theFILE
exists and is executable., -
-d
FILE
– True seFILE
esiste ed è una directory. -
-e
FILE
– True seFILE
esiste ed è un file, indipendentemente dal tipo (nodo, directory, socket, ecc.). -
-f
FILE
– 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.