10 esempi di Bash For Loop con spiegazioni

Il ciclo For è uno strumento essenziale in qualsiasi linguaggio di programmazione. Permette ai programmi di iterare attraverso una serie di elementi, eseguendo lo stesso blocco di codice più volte.

Ad esempio, se si desidera processare ogni elemento di una lista o di un array composto da ‘n’ elementi, il ciclo for è la scelta ideale. Consideriamo un esempio semplice, come una tabella di colori:

1Viola2Indaco3Blu4VerdeTavolo Arcobaleno

Per operare su ogni elemento di questa tabella o per iterare attraverso di essi, un ciclo For è necessario.

Il Ciclo For in Bash

In uno script Bash, la struttura sintattica del ciclo For è la seguente:

#!/bin/bash

for VARIABILE in 1 2 3 4 5.....N

do

 AZIONE 1

 AZIONE 2

 .....

done

La logica del ciclo For in Bash è semplice. La riga iniziale #!/bin/bash indica che si tratta di uno script bash. La parola VARIABILE rappresenta la variabile temporanea utilizzata nel ciclo. N indica il limite massimo delle iterazioni. ‘do’ e ‘done’ delimitano l’inizio e la fine del blocco del ciclo. Le AZIONI sono i comandi eseguiti durante ogni iterazione del ciclo.

Il ciclo For in Bash è versatile e può essere usato con diverse variabili, come liste, stringhe, numeri interi e array. Questo articolo illustrerà alcuni casi d’uso comuni del ciclo For in Bash.

Questi programmi possono essere eseguiti direttamente dalla linea di comando di Bash oppure salvati in un file ed eseguiti con il comando “bash nomefile.sh”.

Iterazione su una Lista Statica

Consideriamo la seguente lista di colori: listaColoriArcobaleno = Viola, Indaco, Blu, Verde, Giallo, Arancione, Rosso

Possiamo visualizzare questa lista di stringhe usando un ciclo For in Bash nel modo seguente:

#!/bin/sh

# Definizione della lista

listaColoriArcobaleno=Viola,Indaco,Blu,Verde,Giallo,Arancione,Rosso

# Modello separatore virgola usando //,/

for colore in ${listaColoriArcobaleno//,/ }

do

   echo $colore

done

L’output mostrerà ogni elemento della lista su una nuova riga.

#Output

Viola
Indaco
Blu
Verde
Giallo
Arancione
Rosso

Iterazione su un Array

La sintassi per la creazione di un array è diversa. Ogni elemento (stringa) deve essere racchiuso tra virgolette e l’insieme tra parentesi.

arrayArcobaleno=("Viola" "Indaco" "Blu" "Verde" "Giallo" "Arancione" "Rosso")

for colore in "${arrayArcobaleno[@]}"; do

     echo "Mi piace il colore $colore"

done

Il simbolo ‘@’ è usato per iterare su ogni elemento dell’array.

#Output

Mi piace il colore Viola
Mi piace il colore Indaco
Mi piace il colore Blu
Mi piace il colore Verde
Mi piace il colore Giallo
Mi piace il colore Arancione
Mi piace il colore Rosso

Il ciclo For può essere usato anche per stampare gli indici e i corrispondenti elementi dell’array.

#Stampa con indice

arrayArcobaleno=("Viola" "Indaco" "Blu" "Verde" "Giallo" "Arancione" "Rosso")

for i in "${!arrayArcobaleno[@]}";

do

  echo "Colore all'indice " $i " : " "${arrayArcobaleno[$i]}"

  i=$((i+1));

done
#Output

Colore all'indice 0 : Viola
Colore all'indice 1 : Indaco
Colore all'indice 2 : Blu
Colore all'indice 3 : Verde
Colore all'indice 4 : Giallo
Colore all'indice 5 : Arancione
Colore all'indice 6 : Rosso

Si noti che usiamo ‘!’ nel ciclo per ottenere l’indice dell’elemento.

Iterazione su un Intervallo di Numeri

Il ciclo For in Bash può iterare facilmente su un intervallo numerico.

#Iterazione su un intervallo di numeri

echo "Inizio conto alla rovescia..."

for N in {10..0}

do

    echo "$N"

done

I due punti ‘..’ indicano un intervallo di numeri.

#Output

10
9
8
7
6
5
4
3
2
1
0

È possibile specificare un passo per saltare dei numeri nell’iterazione.

Nell’esempio che segue, il conteggio viene decrementato di 3 ad ogni iterazione.

#Iterazione con salto

echo "Inizio conto alla rovescia..."

for N in {30..0..3}

do

    echo "$N"

done

Il programma precedente parte da 30 e decrementa fino a 0. L’ultimo parametro ‘3’ del ciclo for definisce il passo di decremento.

#Output

30
27
24
21
18
15
12
9
6
3
0

Stringhe e Caratteri

Con il ciclo For in Bash, possiamo effettuare molte operazioni utili sulle stringhe.

Per esempio, possiamo esaminare ogni carattere di una stringa usando l’operatore ‘seq’ all’interno di un ciclo For:

#Lettura caratteri di una stringa

miaParola="benvenuto"

for i in $(seq 1 ${#miaParola})

do

 echo "${miaParola:i-1:1}"

done

Si noti che ‘seq’ deve iniziare da 1 per ottenere il primo carattere.

#Output

b
e
n
v
e
n
u
t
o

Possiamo anche stampare singolarmente ogni parola di una frase:

#Lettura di ogni parola di una frase

miaFrase="Benvenuti a winadmin.it. Un hub unico per tutti i tecnici"

for parola in $miaFrase; do

    echo $parola

done
#Output

Benvenuti
a
winadmin.it.
Un
hub
unico
per
tutti
i
tecnici

Espressioni

Come in altri linguaggi di programmazione, come Java, possiamo usare espressioni all’interno di un ciclo For in Bash.

for (( var=10; var>=0; var-- ))

do 

  echo "Conto alla rovescia...$var"

done
#Output

Conto alla rovescia...10
Conto alla rovescia...9
Conto alla rovescia...8
Conto alla rovescia...7
Conto alla rovescia...6
Conto alla rovescia...5
Conto alla rovescia...4
Conto alla rovescia...3
Conto alla rovescia...2
Conto alla rovescia...1
Conto alla rovescia...0

Lettura di Argomenti da Linea di Comando

Per acquisire argomenti dalla linea di comando, usiamo il comando ‘read’. Nell’esempio seguente, prendiamo dei numeri dall’utente e ne calcoliamo la somma usando il ciclo For in Bash. La variabile totale accumula la somma parziale e finale.

read -a array -p "Inserisci i numeri da sommare:"

totale=0

for i in ${array[@]}; do

  let totale+=$i

done

echo "La somma dei numeri è: $totale"

L’output sarà simile a questo:

#Output

Inserisci i numeri da sommare: 3 4 66
La somma dei numeri è: 73

Identificazione di Numeri Pari e Dispari

Per identificare i numeri pari e dispari all’interno di un intervallo, per esempio da 1 a 10 (o un qualsiasi numero N), dobbiamo usare una condizione ‘if’ combinata con il ciclo For. Per stabilire se un numero è pari, lo dividiamo per 2; se il resto è 0, allora il numero è pari.

#Dichiarazione delle liste per numeri pari e dispari

pari=""

dispari=""

for (( i=1; i<=10; i++ ))

do

resto=$(( $i % 2 ))

if [ $resto -eq 0 ]; then

 pari="$pari $i "

else

 dispari="$dispari $i "

fi

done

echo "I numeri pari sono: "$pari

echo "I numeri dispari sono: "$dispari

Si noti che nell’esempio, l’intervallo è impostato a 10. Questo valore può essere cambiato per analizzare qualsiasi intervallo. Si può anche provare a leggere il numero dall’utente usando il comando “read” visto precedentemente.

#Output

I numeri pari sono: 2 4 6 8 10
I numeri dispari sono: 1 3 5 7 9

Ciclo Infinito

Un ciclo infinito, o loop infinito, è un ciclo che non termina la sua esecuzione; il programma deve essere forzatamente arrestato con Ctrl+C. Un ciclo infinito può essere creato facilmente in un ciclo For usando l’operatore ‘;;’:

for (( ; ; ))

do

  echo "Benvenuti a winadmin.it"

done
#Output

Benvenuti a winadmin.it
Benvenuti a winadmin.it
Benvenuti a winadmin.it
Benvenuti a winadmin.it
Benvenuti a winadmin.it
Benvenuti a winadmin.it
Benvenuti a winadmin.it
Benvenuti a winadmin.it
Benvenuti a winadmin.it
Benvenuti a winadmin.it
^C
$

L’Istruzione ‘break’

L’istruzione ‘break’ viene usata per interrompere il ciclo quando una certa condizione ‘if’ è verificata.

for colore in Viola Indaco Blu Verde Giallo Arancione Rosso

do

  if [[ "$colore" == 'Verde' ]]; then

    break

  fi

  echo "Cerco il colore Verde, il colore corrente è $colore"

done

echo "Ho trovato il colore $colore"

In questo esempio, cerchiamo il colore Verde. Il ciclo For esamina ogni colore; una volta trovato Verde, il programma esce dal ciclo grazie all’istruzione ‘break’.

#Output

Cerco il colore Verde, il colore corrente è Viola
Cerco il colore Verde, il colore corrente è Indaco
Cerco il colore Verde, il colore corrente è Blu
Ho trovato il colore Verde

L’Istruzione ‘continue’

L’istruzione ‘continue’ serve per saltare l’iterazione corrente e passare alla successiva, in base ad una condizione. Ad esempio, se nel programma precedente non volessimo visualizzare il colore “Verde”, useremmo ‘continue’ e tutti gli altri colori verrebbero visualizzati, tranne il verde.

for colore in Viola Indaco Blu Verde Giallo Arancione Rosso

do

  if [[ "$colore" == 'Verde' ]]; then

    continue

  fi

  echo "$colore"

done
#Output

Viola
Indaco
Blu
Giallo
Arancione
Rosso

Considerazioni Finali

Abbiamo esplorato gli usi più comuni del ciclo For in Bash, impiegando stringhe, numeri interi, array e liste. Se stai imparando Linux ma usi Windows 10, puoi sfruttare la funzionalità WSL per installare Linux sul tuo sistema Windows.

Potrai così usare il terminale Linux in modo simile a CMD.

Successivamente, potresti trovare interessante l’articolo su Come eseguire gli script bash usando Python?