10 esempi di Bash For Loop con spiegazioni

For Loop è parte integrante di qualsiasi linguaggio di programmazione. Consente ai programmi di scorrere un certo numero di elementi.

Ad esempio, se vuoi scorrere un elenco o una matrice di ‘n’ elementi, dovresti utilizzare un ciclo for. Facciamo un semplice esempio:

1Viola2Indaco3Blu4VerdeTavolo Arcobaleno

Per eseguire qualsiasi azione o per iterare gli elementi nella tabella sopra, abbiamo bisogno di un ciclo For.

Bash For Loop

In uno script bash, la sintassi For Loop è la seguente:

#!/bin/bash

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

do

 ACTION 1

 ACTION 2

 .....

done

Bash For Loop è abbastanza semplice. La prima riga #!/bin/bash indica che il codice è uno script bash. VAR sta per la variabile temporanea utilizzata per il ciclo. N indica il numero massimo di iterazioni. ‘do’ e ‘done’ avviano e interrompono rispettivamente il Loop. Le azioni sono i comandi che vengono eseguiti all’interno del ciclo.

Possiamo eseguire Bash For Loop con diverse variabili, come list, stringhe, interi e array. Questo articolo mostrerà alcuni esempi comuni di Bash For Loop.

Puoi eseguire questi programmi direttamente sulla riga di comando bash o salvarli in un file ed eseguire il file usando il comando Bash filename.sh.

Lettura dell’elenco statico

Considera il seguente elenco: rainbowColorList = Violet, Indigo, Blue, Green, Yellow, Orange, Red

Possiamo stampare l’elenco di stringhe sopra usando Bash For Loop come segue:

#! /bin/sh

# Define the list

rainbowColorList=Violet,Indigo,Blue,Green,Yellow,Orange,Red

# Comma separator pattern using //,/

for colors in ${rainbowColorList//,/ }

do

   echo $colors

done

L’output sarà l’elenco degli elementi in una nuova riga.

#Output

Violet
Indigo
Blue
Green
Yellow
Orange
Red

Lettura di un array

La sintassi per dichiarare un array è diversa. Usa le parentesi per ogni elemento (Stringa).

rainbowArray=("Violet" "Indigo" "Blue" "Green" "Yellow" "Orange" "Red")

for colors in "${rainbowArray[@]}"; do

     echo "I like $colors"

done

‘@’ viene utilizzato per scorrere ogni elemento nell’array.

#Output

I like Violet
I like Indigo
I like Blue
I like Green
I like Yellow
I like Orange
I like Red

Possiamo anche usare il ciclo For per stampare gli indici e gli elementi dell’array.

#Printing with index

rainbowArray=("Violet" "Indigo" "Blue" "Green" "Yellow" "Orange" "Red")

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

do

  echo "Color at index " $i " : " "${rainbowArray[$i]}"

  i=$((i+1));

done
#Output

Color at index 0 : Violet
Color at index 1 : Indigo
Color at index 2 : Blue
Color at index 3 : Green
Color at index 4 : Yellow
Color at index 5 : Orange
Color at index 6 : Red

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

Intervallo di numeri iterativo

Possiamo usare Bash For Loop per iterare su un intervallo di numeri.

#iterating over range of numbers

echo "Countdown begins..."

for N in {10..0}

do

    echo "$N"

done

Il ‘..’ indica un intervallo di numeri.

#Output

10
9
8
7
6
5
4
3
2
1
0

Possiamo anche saltare i numeri di conteggio specificando l’intervallo.

Nell’esempio seguente, saltiamo il conteggio di 3.

#iterating with skip counting

echo "Countdown begins..."

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

do

    echo "$N"

done

Il programma di cui sopra inizia con 30 come primo numero e conta alla rovescia fino a 0. L’ultimo parametro nel ciclo for ‘3’ specifica il numero di skip count.

#Output

30
27
24
21
18
15
12
9
6
3
0

Stringhe e caratteri

Possiamo fare molte interessanti operazioni sulle stringhe con Bash For Loop.

Ad esempio, possiamo leggere ogni carattere di una stringa usando l’operatore ‘seq’ in un ciclo For:

#read characters of a string

myword="welcome"

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

do

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

done

Nota che ‘seq’ dovrebbe iniziare con 1 per ottenere prima il primo carattere.

#Output

W
e
l
c
o
m
e

Possiamo anche stampare le stringhe separate da spazio una per una:

#read each word from a sentence

mysentence="Welcome to winadmin.it. One stop hub for all techies"

for word in $mysentence; do

    echo $word

done
#Output

Welcome 
to 
winadmin.it. 
One 
stop 
hub 
for 
all 
techies

Espressioni

Simile a qualsiasi altro linguaggio di programmazione come Java, possiamo inserire espressioni all’interno di un Bash For Loop.

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

do 

  echo "Counting down...$var"

done
#Output

Counting down...10
Counting down...9
Counting down...8
Counting down...7
Counting down...6
Counting down...5
Counting down...4
Counting down...3
Counting down...2
Counting down...1
Counting down...0

Lettura di argomenti della riga di comando

Per leggere gli argomenti della riga di comando, utilizziamo il comando ‘read’. Nell’esempio seguente, otterremo alcuni numeri dall’utente e stamperemo la somma utilizzando Bash For Loop. Usiamo la variabile total per memorizzare il totale intermedio e finale o la somma dei numeri.

read -a array -p "Enter the numbers you want to add:"

total=0

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

  let total+=$i

done

echo "Sum of the numbers is: $total"

L’uscita è:

#Output

Enter the numbers you want to add: 3 4 66
Sum of the numbers is: 73

Trovare numeri pari e dispari

Per trovare numeri pari e dispari compresi tra 1 e 10 (o qualsiasi numero N), dovremmo usare la condizione if insieme a Bash per Loop. Per determinare un numero pari, lo divideremo per 2 e, se il resto è 0, lo classificheremo come dispari.

#declare the list where the even and odd numbers will be sorted and kept

evennum=""

oddnum=""

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

do

remainder=$(( $i % 2 ))

if [ $remainder -eq 0 ]; then

 evennum="$evennum $i "

else

 oddnum="$oddnum $i "

fi

done

echo "Even numbers are: "$evennum

echo "Odd numbers are: "$oddnum

Nota che stiamo dando l’intervallo come 10 nell’esempio sopra. Possiamo modificare questo numero per ottenere numeri pari e dispari tra qualsiasi intervallo. Puoi anche provare a leggere il numero dall’utente usando il comando “leggi” che abbiamo imparato nella sezione precedente.

#Output

Even numbers are: 2 4 6 8 10
Odd numbers are: 1 3 5 7 9

Ciclo infinito

Infinity o loop infinito è un ciclo che non interrompe l’esecuzione e il programma deve essere forzato a interrompersi usando Ctrl+C. Possiamo facilmente creare un ciclo infinito usando ‘; ;’ operatore all’interno del ciclo for:

for (( ; ; ))

do

  echo "Welcome to winadmin.it"

done
#Output

Welcome to winadmin.it
Welcome to winadmin.it
Welcome to winadmin.it
Welcome to winadmin.it
Welcome to winadmin.it
Welcome to winadmin.it
Welcome to winadmin.it
Welcome to winadmin.it
Welcome to winadmin.it
Welcome to winadmin.it
^C
$

Dichiarazione di rottura

Le istruzioni di interruzione vengono utilizzate per interrompere il ciclo quando viene soddisfatta una condizione ‘se’.

for color in Violet Indigo Blue Green Yellow Orange Red

do

  if [[ "$color" == 'Green' ]]; then

    break

  fi

  echo "Searching for Green, the color now is $color"

done

echo "I found my color $color"

In questo esempio, stiamo cercando di trovare il colore verde. Il ciclo For scorre ogni colore e, una volta trovato il colore verde, il programma esce dal ciclo a causa dell’istruzione break.

#Output

Searching for Green, the color now is Violet
Searching for Green, the color now is Indigo
Searching for Green, the color now is Blue
I found my color Green

Continua Dichiarazione

Continua viene utilizzato per saltare il ciclo corrente e passare al successivo in base a una determinata condizione. Ad esempio, se non si desidera stampare il colore “Verde” dal nostro programma precedente, possiamo inserire continua e verranno visualizzati tutti gli altri colori tranne il verde.

for color in Violet Indigo Blue Green Yellow Orange Red

do

  if [[ "$color" == 'Green' ]]; then

    continue

  fi

  echo "$color"

done
#Output

Violet
Indigo
Blue
Yellow
Orange
Red

Parole finali

Abbiamo trattato gli usi più comuni di un Bash For Loop, utilizzando stringhe, numeri interi, array e list. Se stai imparando Linux ma hai una macchina Windows 10, puoi usare la funzione WSL e installare Linux sulla tua macchina Windows.

È quindi possibile utilizzare il terminale Linux in modo simile a CMD.

Successivamente, puoi dare un’occhiata a Come eseguire gli script bash usando Python?