Bash Scripting – Ciclo For
Poiché BASH è un linguaggio da riga di comando, otteniamo un'esperienza piuttosto ricca di funzionalità per sfruttare le capacità di programmazione per eseguire attività nel terminale. Possiamo utilizzare cicli e istruzioni condizionali negli script BASH per eseguire alcuni problemi ripetitivi e complicati in modo semplice a livello di programmazione. In questo articolo ci concentreremo su per ciclo negli script BASH.
A seconda del caso d'uso e del problema che si sta tentando di automatizzare, esistono un paio di modi per utilizzare i loop.
- Ciclo For semplice
- Ciclo for basato su intervallo
- Iterazione dell'array per i loop
- Stile C per loop
- Ciclo for infinito
Ciclo For semplice
Per eseguire un ciclo for possiamo scrivere la seguente sintassi:
#!/bin/bash for n in a b c; do echo $n done
- Nella prima iterazione,
n>assume il valore a e lo script stampa a. - Nella seconda iterazione,
n>prende il valore b e lo script stampa b. - Nella terza iterazione,
n>assume il valore c e lo script stampa c.
Il comando precedente eseguirà l'iterazione sugli elementi specificati dopo il In parola chiave una per una. Gli elementi possono essere numeri, stringhe o altre forme di dati.
Ciclo for basato su intervallo
Possiamo usare cicli for basati su intervallo. In questo tipo di ciclo, possiamo specificare il numero da avviare, interrompere e incrementare ad ogni iterazione (facoltativa) nell'istruzione. Esistono due modi per farlo, ovvero menzionando il valore di incremento/decremento e incrementando di uno per impostazione predefinita. La sintassi è simile alla seguente:
#!/bin/bash for n in {1..5}; do echo $n done
Nel codice sopra, usiamo {} per specificare un intervallo di numeri. All'interno delle parentesi graffe specifichiamo il punto iniziale seguito da due punti e un punto finale. Per impostazione predefinita, incrementa di uno. Quindi stampiamo 5 numeri da 1 a 5 entrambi compresi.
#!/bin/bash for n in {1..5..2}; do echo $n done
Qui possiamo vedere che il ciclo è aumentato di 2 unità come indicato tra parentesi graffe. Pertanto, questo rende il lavoro con i numeri molto semplice e conveniente. Può essere utilizzato anche con caratteri alfabetici.
NOTA: Non possiamo usare variabili all'interno delle parentesi graffe, quindi dovremo codificare i valori. Per utilizzare le variabili, vedremo i tradizionali cicli for in stile C nelle prossime sezioni.
Iterazione dell'array per i loop
Possiamo eseguire iterazioni sugli array comodamente in bash utilizzando cicli for con una sintassi specifica. Possiamo usare le variabili speciali in BASH cioè @ per accedere a tutti gli elementi nell'array. Diamo un'occhiata al codice:
#!/bin/bash s=('football' 'cricket' 'hockey') for n in ${s[@]}; do echo $n done
Possiamo scorrere gli elementi dell'array utilizzando l'operatore @ che ottiene tutti gli elementi dell'array. Quindi, utilizzando il ciclo for, li iteriamo uno per uno. Usiamo la variabile ${variable_name[@]} in cui le parentesi graffe qui espandono il valore della variabile s qui che è un array di stringhe. Utilizzando l'operatore [@] accediamo a tutti gli elementi e quindi iteriamo su di essi nel ciclo for. Ecco, il N è l'iteratore, quindi possiamo stampare il valore o eseguire l'elaborazione richiesta su di esso.
Stile C per loop
Come detto in precedenza, dobbiamo utilizzare le variabili all'interno dei cicli for per scorrere una serie di elementi. E quindi, i cicli for in stile C svolgono un ruolo molto importante. Vediamo come li utilizziamo.
#!/bin/bash n=7 for (( i=1 ; i <=$n ; i++ )); do echo $i done
Come possiamo vedere possiamo utilizzare dinamicamente il valore dell'intervallo di condizioni finali. Ricorda che gli spazi tra le doppie parentesi graffe potrebbero essere intenzionali e fanno parte della sintassi. I cicli for in stile C sono i cicli che hanno 3 parti, l'iteratore di inizializzazione, l'incremento/decrementatore e la condizione finale.
Nella sintassi precedente, abbiamo inizializzato l'iteratore/contatore del ciclo su 1 che può essere qualsiasi cosa, a scelta. La seconda parte è la condizione finale, qui abbiamo utilizzato la variabile N che viene inizializzato prima del ciclo for e quindi usiamo il semplice $ operatore per ottenere il valore della variabile. Infine abbiamo l'incremento/decremento che cambia l'iteratore/contatore in un valore che può essere qualsiasi cosa ma, nell'esempio, abbiamo utilizzato l'operatore unario (++) per incrementare il valore di uno che equivale a io=io+1 . Quindi possiamo usare affermazioni come i+=2, i–,++i, E così via e così via.
Ciclo for infinito
Non lo usiamo spesso, ma a volte è utile per far funzionare certe cose. La sintassi è abbastanza semplice e simile ai cicli for in stile C.
#!/bin/bash n=4 for (( ; ; )); do if [ $n -eq 9 ];then break fi echo $n ((n=n+1)) done
Il ciclo inizia con n> impostato su 4. Incrementa n> per 1 ad ogni iterazione e stampa il valore di n> Fino a n> diventa uguale a 9. Quando n> raggiunge 9, il break> l'istruzione viene eseguita e il ciclo termina. Lo script si ferma dopo aver stampato i numeri da 4 a 8.
Come possiamo vedere, il ciclo 'for' non ha condizioni e si ripete all'infinito, ma abbiamo un'istruzione condizionale per verificare che non vada avanti all'infinito. Usiamo l'istruzione break all'interno dell'istruzione if in modo da uscire dal ciclo e interrompere l'iterazione con l'iteratore. Abbiamo utilizzato l'incremento per incrementare la variabile nel ciclo altrimenti il ciclo è infinito. Naturalmente, abbiamo bisogno di un po' di logica per uscire dal ciclo ed è per questo che dobbiamo usare l'istruzione condizionale if.