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?