back to top

I cicli FOR e WHILE – Guida Shell Scripting

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:

Pubblicità
#!/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.

Pubblicità
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).