
Questo tutorial ti guiderà attraverso le basi di Bash if
Statement e mostrarti come usarlo nei tuoi script di shell.
Il processo decisionale è uno dei concetti fondamentali della programmazione informatica. Come in qualsiasi altro linguaggio di programmazione, if
, if..else
, if..elif..else
e if
nidificato le istruzioni in Bash vengono utilizzate per eseguire codice in base a una determinata condizione.
if
Dichiarazione #
Bash if
i condizionali possono avere forme diverse. Il più semplice if
dichiarazione assume la forma seguente:
if TEST-COMMAND
then
STATEMENTS
fi
Il if
l'istruzione inizia con if
parola chiave seguita dall'espressione condizionale e da then
parola chiave. L'istruzione termina con fi
parola chiave.
Se il TEST-COMMAND
restituisce True
, le STATEMENTS
viene giustiziato. Se TEST-COMMAND
restituisce False
, non succede niente; le STATEMENTS
vieni 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. Rientri e righe vuote rendono il tuo codice più leggibile e organizzato.
Diamo un'occhiata al seguente script di esempio che verifica se un determinato numero è maggiore di 10:
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
fi
Salva il codice in un file ed eseguilo dalla riga di comando:
bash test.sh
Lo script ti chiederà di inserire un numero. Se, ad esempio, inserisci 15, il test
il comando restituirà true
perché 15 è maggiore di 10 e echo
comando all'interno di then
la clausola verrà eseguita.
The variable is greater than 10.
if..else
Dichiarazione #
Il if..else
di Bash dichiarazione assume la forma seguente:
if TEST-COMMAND
then
STATEMENTS1
else
STATEMENTS2
fi
Se il TEST-COMMAND
restituisce True
, il STATEMENTS1
sarà eseguito. Altrimenti, se TEST-COMMAND
restituisce False
, il STATEMENTS2
sarà eseguito. Puoi avere solo un else
clausola nella dichiarazione.
Aggiungiamo un else
clausola allo script di esempio precedente:
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
else
echo "The variable is equal or less than 10."
fi
Se esegui il codice e inserisci un numero, lo script stamperà un messaggio diverso a seconda che il numero sia maggiore o minore/uguale a 10.
if..elif..else
Dichiarazione #
Il if..elif..else
di Bash dichiarazione assume la forma seguente:
if TEST-COMMAND1
then
STATEMENTS1
elif TEST-COMMAND2
then
STATEMENTS2
else
STATEMENTS3
fi
Se il TEST-COMMAND1
restituisce True
, il STATEMENTS1
sarà eseguito. Se il TEST-COMMAND2
restituisce True
, il STATEMENTS2
sarà eseguito. Se nessuno dei comandi di test restituisce True
, il STATEMENTS2
viene eseguito.
Puoi avere uno o più elif
clausole nella dichiarazione. Il else
la clausola è facoltativa.
Le condizioni vengono valutate in sequenza. Una volta che una condizione restituisce True
, le restanti condizioni non vengono eseguite e il controllo del programma si sposta alla fine del if
dichiarazioni.
Aggiungiamo un elif
clausola allo script precedente:
#!/bin/bash
echo -n "Enter a number: "
read VAR
if [[ $VAR -gt 10 ]]
then
echo "The variable is greater than 10."
elif [[ $VAR -eq 10 ]]
then
echo "The variable is equal to 10."
else
echo "The variable is less than 10."
fi
Nidificato if
Dichiarazioni #
Bash ti permette di annidare if
dichiarazioni all'interno di if
dichiarazioni. Puoi inserire più if
istruzioni all'interno di un altro if
dichiarazione.
Il seguente script ti chiederà di inserire tre numeri e di stampare il numero più grande tra i tre numeri.
#!/bin/bash
echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3
if [[ $VAR1 -ge $VAR2 ]]
then
if [[ $VAR1 -ge $VAR3 ]]
then
echo "$VAR1 is the largest number."
else
echo "$VAR3 is the largest number."
fi
else
if [[ $VAR2 -ge $VAR3 ]]
then
echo "$VAR2 is the largest number."
else
echo "$VAR3 is the largest number."
fi
fi
Ecco come apparirà l'output:
Enter the first number: 4
Enter the second number: 7
Enter the third number: 2
7 is the largest number.
In generale, è più efficiente usare il case
statementinvece di if
annidato dichiarazioni. Condizioni multiple #
Il OR
logico e AND
gli operatori ti consentono di utilizzare più condizioni in if
dichiarazioni.
Ecco un'altra versione dello script per stampare il numero più grande tra i tre numeri. In questa versione, invece del if
annidato istruzioni, stiamo usando la logica AND
(&&
) operatore.
#!/bin/bash
echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3
if [[ $VAR1 -ge $VAR2 ]] && [[ $VAR1 -ge $VAR3 ]]
then
echo "$VAR1 is the largest number."
elif [[ $VAR2 -ge $VAR1 ]] && [[ $VAR2 -ge $VAR3 ]]
then
echo "$VAR2 is the largest number."
else
echo "$VAR3 is the largest number."
fi
Operatori di test #
In Bash, il test
comando prende una delle seguenti forme di sintassi:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
Per rendere lo script portatile, preferisci usare il vecchio test [
comando, disponibile su tutte le shell POSIX. La nuova versione aggiornata del test
comando [[
(parentesi doppie) è supportato sulla maggior parte dei sistemi moderni che utilizzano Bash, Zsh e Ksh come shell predefinita.
Per negare l'espressione di test, usa il logico NOT
(!
) operatore. 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
- Vero se la lunghezza diVAR
è maggiore di zero.-z
VAR
- Vero se ilVAR
è vuoto.STRING1 = STRING2
- Vero seSTRING1
eSTRING2
sono uguali.STRING1 != STRING2
- Vero seSTRING1
eSTRING2
non sono uguali.INTEGER1 -eq INTEGER2
- Vero seINTEGER1
eINTEGER2
sono uguali.INTEGER1 -gt INTEGER2
- Vero seINTEGER1
è maggiore diINTEGER2
.INTEGER1 -lt INTEGER2
- Vero seINTEGER1
è minore diINTEGER2
.INTEGER1 -ge INTEGER2
- Vero seINTEGER1
è uguale o maggiore di INTEGER2.INTEGER1 -le INTEGER2
- Vero seINTEGER1
è uguale o minore diINTEGER2
.-h
FILE
- Vero se ilFILE
esiste ed è un collegamento simbolico.-r
FILE
- Vero se ilFILE
esiste ed è leggibile.-w
FILE
- Vero se ilFILE
esiste ed è scrivibile.-x
FILE
- Vero se ilFILE
esiste ed è eseguibile.-d
FILE
- Vero se ilFILE
esiste ed è una directory.-e
FILE
- Vero se ilFILE
esiste ed è un file, indipendentemente dal tipo (nodo, directory, socket, ecc.).-f
FILE
- Vero se ilFILE
esiste e è un file normale (non una directory o un dispositivo).
Conclusione #
Il if
, if..else
e if..elif..else
Le istruzioni consentono di controllare il flusso di esecuzione dello script Bash valutando determinate condizioni.
Se hai domande o feedback, sentiti libero di lasciare un commento.