Un ciclo (o iterazione) è una ripetizione di una determinata azione per un dato numero di volte sulla base di un dato delimitatore. Nei linguaggi di programmazione e negli script di shell, i costrutti più comuni per realizzare un ciclo sono for e while. In questo articolo, esploreremo entrambi con esempi pratici.
Il ciclo for
Il ciclo FOR realizza iterazioni sulla base di una lista di valori o condizioni predefinite. Esaminiamo un esempio in shell script:
#!/bin/sh
for X in 1 2 3 4 5
do
echo $X
done
In questo esempio, il ciclo for
itera sui valori specificati (i numeri da 1 a 5) e stampa ciascuno di essi. È possibile utilizzare anche valori non sequenziali o non numerici per ottenere diverse funzionalità.
Lo stesso risultato può essere ottenuto utilizzando il comando seq
per generare la sequenza di valori:
for X in $(seq 5)
do
echo $X
done
Qui, abbiamo utilizzato seq
per creare una sequenza numerica. Il comando seq si rivela utile specialmente per lunghe sequenze. Ecco le modalità di utilizzo del comando seq
:
- Specifica solo il valore finale (come nell’esempio sopra);
- Specifica sia il valore iniziale che finale;
- Specifica il valore iniziale, l’incremento e il valore finale.
È importante notare che nel contesto della Bourne Shell, il ciclo for
non può utilizzare la sintassi formale del ciclo for
di Bash:
for (( X=0; X<10; X++ ))
do
echo $X
done
Questa sintassi appartiene a Bash, quindi per eseguirla correttamente, assicuratevi di specificare la shell appropriata nella prima riga dello script, utilizzando:
#!/bin/bash
Altrimenti, potrebbe apparire un errore di sintassi: "Syntax error: Bad for loop variable".
Il ciclo while
Un altro modo per creare iterazioni all'interno degli script è tramite il ciclo WHILE, che esegue le operazioni fintanto che una condizione rimane vera:
#!/bin/sh
X=1
while [ $X -le 5 ]
do
echo $X
X=`expr $X + 1`
done
In questo esempio, il ciclo continua finché la variabile X
è minore o uguale a 5, stampando quindi una sequenza numerica da 1 a 5.
break e continue
Due comandi fondamentali nella gestione dei cicli sono break e continue. break
è utilizzato per interrompere il ciclo in maniera immediata. Ecco un esempio di utilizzo:
#!/bin/sh
X=1
while [ $X -le 20 ]
do
echo $X
if [ $X -eq 5 ]
then
break
fi
X=`expr $X + 1`
done
In questo caso, il ciclo viene interrotto quando la variabile X
raggiunge il valore 5.
Grazie a break
, è possibile interrompere anche più cicli annidati:
#!/bin/sh
for X1 in 1 2 3
do
for X2 in 0 5
do
if [ $X1 -eq 2 -a $X2 -eq 0 ]
then
break 2
else
echo "$X1 $X2";
fi
done
done
In questo esempio, la doppia condizione quando verificata porta al termine di entrambi i cicli, grazie alla sintassi break n
, dove "n" indica il numero di cicli da interrompere.
Invece, continue
non interrompe il ciclo, ma ne salta l'iterazione corrente, proseguendo con la successiva. Il funzionamento e la sintassi sono analoghi a quelli di break
.