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:
-nVAR- Vero se la lunghezza diVARè maggiore di zero.-zVAR- Vero se ilVARè vuoto.STRING1 = STRING2- Vero seSTRING1eSTRING2sono uguali.STRING1 != STRING2- Vero seSTRING1eSTRING2non sono uguali.INTEGER1 -eq INTEGER2- Vero seINTEGER1eINTEGER2sono 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.-hFILE- Vero se ilFILEesiste ed è un collegamento simbolico.-rFILE- Vero se ilFILEesiste ed è leggibile.-wFILE- Vero se ilFILEesiste ed è scrivibile.-xFILE- Vero se ilFILEesiste ed è eseguibile.-dFILE- Vero se ilFILEesiste ed è una directory.-eFILE- Vero se ilFILEesiste ed è un file, indipendentemente dal tipo (nodo, directory, socket, ecc.).-fFILE- Vero se ilFILEesiste 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.