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.
Sommario:
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?