Introduzione
I loop sono uno dei concetti fondamentali dei linguaggi di programmazione. I loop sono utili quando si desidera eseguire una serie di comandi un numero di volte fino a quando non viene soddisfatta una determinata condizione.
In linguaggi di scripting come Bash, i loop sono utili per automatizzare attività ripetitive. Esistono 3 costrutti di loop di base negli script Bash, for loop , while loop e until a loop .
Questo tutorial spiega le basi di loop while in Bash e le istruzioni break e continue per modificare il flusso di un loop.
Bash While Loop
Il ciclo while viene utilizzato per eseguire un determinato set di comandi un numero sconosciuto di volte, purché la condizione specificata sia vera.
Il ciclo Bash while ha la forma seguente:
while [CONDITION]
do
[COMMANDS]
done
La condizione viene valutata prima di eseguire i comandi. Se la condizione restituisce true, i comandi vengono eseguiti. In caso contrario, se la condizione restituisce false, il ciclo verrà terminato e il controllo del programma verrà passato al comando seguente.
Nell'esempio seguente, ad ogni iterazione il ciclo stampa il valore corrente della variabile i
e incrementa la variabile di uno.
i=0
while [ $i -le 2 ]
do
echo Number: $i
((i++))
done
Il ciclo di ripetizione continua finché i
è inferiore o uguale a due. Produrrà il seguente output:
Number: 0
Number: 1
Number: 2
While Loop infinito
Un ciclo infinito è un ciclo che si ripete all'infinito e non termina mai. Se la condizione viene sempre valutata vera, si ottiene un ciclo infinito.
Nel seguente esempio stiamo usando il comando integrato :
che restituisce sempre true per creare un ciclo infinito. È inoltre possibile utilizzare il comando true
integrato o qualsiasi altra istruzione che restituisce sempre true.
while :
do
echo "Press <CTRL+C> to exit."
sleep 1
done
Il ciclo while sopra funzionerà indefinitamente. È possibile terminare il loop premendo CTRL+C
.
Ecco un equivalente a riga singola:
while :; do echo 'Press <CTRL+C> to exit.'; sleep 1; done
Leggi un file riga per riga
Uno degli usi più comuni del ciclo while è leggere un file, un flusso di dati o una variabile riga per riga.
Nell'esempio seguente il ciclo while leggerà il file /etc/passwd
riga per riga e stamperà ogni riga.
file=/etc/passwd
while read -r line; do
echo $line
done < "$file"
Invece di controllare il ciclo while con una condizione, stiamo usando l'input redirection < "$file"
per passare un file al read
che è il comando che controlla il ciclo. Il ciclo while verrà eseguito fino alla lettura dell'ultima riga.
Quando si legge il file riga per riga, utilizzare sempre read
con l'opzione -r
per evitare che la barra rovesciata funga da carattere di escape.
Per impostazione predefinita, il comando read
taglia i caratteri di spazi bianchi iniziali/finali (spazi e tabulazioni). Utilizzare l'opzione IFS=
prima del comando read
per impedire questo comportamento
file=/etc/passwd
while IFS= read -r line; do
echo $line
done < "$file"
Dichiarazioni di break and continue
Le istruzioni break e continue possono essere utilizzate per controllare l'esecuzione del ciclo while.
Dichiarazione di rottura
L'istruzione break termina il loop corrente e passa il controllo del programma al comando che segue il loop terminato. Di solito viene utilizzato per terminare il loop quando viene soddisfatta una determinata condizione.
Nel seguente esempio, l'esecuzione del ciclo verrà interrotta quando l'elemento iterato corrente è uguale a 2
.
i=0
while [ $i -lt 5 ]
do
echo "Number: $i"
((i++))
if [[ "$i" == '2' ]]; then
break
fi
done
echo 'All Done!'
Number: 0
Number: 1
All Done!
Dichiarazione Continue
L'istruzione continue esce dall'iterazione corrente di un ciclo e passa il controllo del programma alla successiva iterazione del ciclo.
Di seguito, una volta che l'elemento iterato corrente è uguale 2
, la dichiarazione continue permetterà di tornare all'inizio del ciclo e continuerà con l'iterazione successiva.
i=0
while [ $i -lt 5 ]
do
((i++))
if [[ "$i" == '2' ]]; then
continue
fi
echo "Number: $i"
done
echo 'All Done!'
Number: 1
Number: 3
Number: 4
Number: 5
All Done!
Conclusione
Ormai dovresti avere una buona conoscenza di come usare il ciclo bash while.