Come usare il ciclo for in Bash (Bash for loop): sintassi ed esempi

Un ciclo for in Bash (Bash for loop) è un’istruzione del linguaggio di programmazione Bash che consente a un codice o a uno script di essere eseguito ripetutamente. Ti consente di completare attività ripetitive contemporaneamente, contribuendo a migliorare l’efficienza della gestione del sistema. 

Un ciclo for in Bash funziona assegnando gli elementi di un elenco a una variabile ed eseguendo un’operazione per ciascuno di essi. La sintassi di base è la seguente:

for VARIABILE in 1 2 3 4 5 ... N
Esegui i seguenti comandi:
comando1
comando2
comandoN
done

In uno scenario reale, un ciclo for di Bash può essere implementato in vari modi, spesso con il coinvolgimento di altri concetti di programmazione. Per esempio, puoi usare un ciclo for di Bash per creare un ciclo a tre espressioni, un ciclo infinito, una sequenza di avvio e arresto e altro ancora. 

Continua a leggere per saperne di più sul ciclo for di Bash e sui suoi esempi pratici di utilizzo. 

Che cos’è un ciclo for di Bash?

Un ciclo for in Bash è una struttura che ti permette di eseguire ripetutamente un insieme di comandi su più elementi con una sola esecuzione. È utile per automatizzare operazioni ripetitive, come rinominare i file, in un sistema basato sulla riga di comando come un server virtuale privato Linux (VPS).

La logica alla base di un ciclo for in Bash è la seguente: un insieme di comandi continuerà a essere eseguito in un ciclo per ogni elemento elencato nella variabile. Questo ciclo termina dopo aver eseguito l’operazione per l’ultimo elemento.

In parole semplici, puoi interpretarlo così: per ogni elemento assegnato alla variabile, il ciclo esegue lo stesso insieme di comandi. Tuttavia, puoi aggiungere istruzioni condizionali per modificare il comportamento del ciclo.

Vediamo la sintassi di un ciclo for di Bash riga per riga nella prossima sezione, per capire meglio come funziona.

Qual è la sintassi di un ciclo for di Bash?

Il ciclo for di Bash esegue ripetutamente un insieme di comandi, iterando attraverso una sequenza di elementi o valori. La sintassi di un’operazione di questo tipo è la seguente:

for VARIABILE in 1 2 3 4 5 ... N
Esegui i seguenti comandi:
comando1
comando2
comandoN
done

Nel mondo reale, questa sintassi apparirebbe come nell’esempio qui sotto:

#!/bin/bash
for i in 1 2 3 4 5
do
echo "Ciao $i"
done

L’esecuzione del file bash provocherà la seguente sequenza:

Ciao 1
Ciao 2
Ciao 3
Ciao 4
Ciao 5

Esaminiamo ogni elemento:

  • #!/bin/bash – indica che il codice è uno script bash.
  • i – è un segnaposto per una variabile. Nel frattempo, $i è il valore individuale della variabile. Puoi anche scriverlo come c/$c o con qualsiasi altro nome.
  • in – separa la variabile dagli elementi che seguono.
  • 1 2 3 4 5 – è un esempio di elementi su cui vuoi eseguire l’istruzione.
  • do – è la parola chiave che avvia i cicli. Eseguirà quindi l’istruzione n volte, dove n è il numero totale di elementi. Qui, il valore di n è 5.
  • echo “Ciao: $i – è il comando Linux o l’operazione che ripeteremo n volte. Ricorda che le virgolette trasformano tutto ciò che contengono in un’unica variabile.
  • done – interrompe il loop.

Le altre due sintassi comuni dei comandi di loop sono queste:

for VARIABLE in file1 file2 file3
do
comando1 on $VARIABLE
comando2
comandoN
done

E questo:

for OUTPUT in $(Linux-Or-Unix-Command-Here)
do
comando1 on $OUTPUT
commando2 on $OUTPUT
commandoN
done

Ora che hai capito la sintassi del ciclo for in Bash, vediamo alcuni esempi di come appare lo script vero e proprio nelle applicazioni reali.

Quali sono gli esempi di un ciclo for in Bash?

Ecco alcuni esempi di cicli for in Bash usati per eseguire più operazioni. Se vuoi seguire questa procedura, devi accedere al tuo VPS.

Ricorda che le funzioni bash devono trovarsi in un file .sh. Per crearne uno, esegui il seguente comando nella riga di comando:

vim filename.sh

Questo creerà un file .sh e lo aprirà nell’editor VIM. Puoi saperne di più nell’articolo sulle funzioni di base di Bash menzionato in precedenza.

Come usare un ciclo for di Bash con un numero

Usare un ciclo for di Bash con i numeri ti permette di iterare in un intervallo invece di specificare gli elementi singolarmente. Per farlo, aggiungi l’intervallo tra parentesi graffe separato da due punti.

Per esempio, il seguente ciclo stamperà tutti i numeri da uno a cinque:

for i in {1..5}
do
  echo "$i"
done

Puoi anche modificare l’incremento usando la sintassi a tre espressioni {START..END..INCREMENT}. Ecco l’esempio di codice:

for i in {1..10..2}
do
  echo "Number: $i"
done

Importante! In alcuni script, la sintassi di incremento usa le doppie parentesi invece delle parentesi graffe. In ogni caso, entrambi hanno la stessa funzione.

Il ciclo opererà sul primo valore, 1, passerà al valore successivo con incrementi di due fino a 3 e così via. Quando raggiunge il valore finale di 10, il codice si interrompe. Ecco l’output:

L’output del ciclo for di bash con incremento

Tieni presente che la funzionalità di intervallo è disponibile solo in Bash versione 3.0 o successive, mentre l’incremento è supportato in Bash 4.0 e versioni più recenti.

Come usare un ciclo for di Bash con gli elementi di un array

Combinando un ciclo for di Bash con un array, iteri sugli elementi raggruppati ed esegui un insieme di comandi per ciascuno di essi. Invece di usare un elenco, integrare gli array in Bash rende il tuo script più organizzato e facile da leggere, soprattutto quando vuoi usare molti elementi.

Per usare un ciclo for di Bash con un array, dichiara l’array e i suoi elementi all’inizio. Quindi, aggiungilo alla tua espressione for-in in questo modo:

#Dichiara un array di elementi
array=("elemento1" "elemento2" "elemento3" "elemento4")

#Scorri l'array ed esegui le operazioni
for elemento in "${array[@]}"
do
   comando1
   comando2
   comando3
done

Ecco un esempio di ciclo for in Bash con elementi di un array, usando la frutta come elementi:

fruit_array=("apple" "banana" "red cherry" "green grape")

for fruit in "${fruit_array[@]}"
do
   echo "Fruit: $fruit"
done

Il loop bash scorrerà gli elementi dell’array e userà il comando echo per stamparli con il prefisso Fruit:. Ecco come appare l’output:

L’output di un ciclo for di Bash con un array

Se aggiungi un altro comando, il ciclo opererà sullo stesso elemento prima di passare a quello successivo. Per esempio, inseriremo un altro echo per aggiungere un suffisso all’elemento. Ecco l’output:

L’output di un ciclo for di Bash con un array e due operazioni

Come usare un ciclo for di Bash con una variabile della shell

Combinare un ciclo for di Bash con una variabile della shell ti permette di memorizzare gli elementi che il tuo codice scorrerà in iterazione. Funziona in modo simile a un array, perché raggruppi più elementi, ma usa gli spazi per separare le voci.

Un ciclo for di Bash con una variabile di shell usa la seguente sintassi:

#Definisci la variabile della shell
variabile="un singolo elemento"

#Scorri la variabile ed esegui le operazioni
for elemento in $variabile
do
   comando1
   comando2
   comando3
done

La variabile della shell contiene un solo elemento di dati, ma il ciclo Bash itera automaticamente sugli elementi separati da spazi, trattandoli come entità distinte. Considera questo esempio:

var_numbers="1 2 3 4 5"

for number in $var_numbers
do
   echo "Number: $number"
done

Invece di stampare i numeri come una stringa, il ciclo bash li stamperà singolarmente perché sono separati da uno spazio. Per trattare gli elementi come un’unica entità, racchiudi la variabile $var_numbers nell’espressione for-in tra virgolette, come segue:

for number in "$var_numbers"
L’output di un ciclo for di Bash con una variabile composta da un solo elemento

Puoi modificare il comportamento delle variabili di Bash per cambiare l’output del ciclo.

Come usare un ciclo for di Bash con le stringhe

Combinare un ciclo for di Bash con le stringhe ti permette di scorrere il testo per eseguire operazioni come la concatenazione, che in genere viene raggruppata in una variabile o in un array della shell. Usare una variabile della shell è comune se le stringhe non sono separate da uno spazio, come nella sintassi seguente:

variabile="stringa1 stringa2 stringa3"

for elemento in $variabile
do
   comando1
   comando2
   comando3
done

Nel frattempo, usa un ciclo for di Bash con stringhe raggruppate in un array se la tua stringa contiene spazi. Oltre a consentire al loop bash di leggere elementi separati da spazi, sono più facili da iterare ed espandere. Ecco la sintassi:

array=("Primo elemento" "Secondo elemento" "Terzo elemento" "Quarto elemento")

for elemento in "${array[@]}"
do
   comando1
   comando2
   comando3
done

Come usare un ciclo for di Bash per creare un ciclo a tre espressioni

Usare un ciclo for di Bash per creare un ciclo a tre espressioni utilizza una struttura simile al linguaggio di programmazione C. Questa struttura è composta da tre espressioni di scrittura: un’inizializzazione (EXP1), una condizione (EXP2) e un passaggio di conteggio (EXP3).

L’inizializzatore imposta la variabile iniziale dello script e la condizione determina se il ciclo continua oppure no. Nel frattempo, il passaggio di conteggio modifica il valore iniziale finché non soddisfa la condizione specificata. La sintassi di questo ciclo è la seguente:

for (( ESP1; ESP2; ESP3 ))
do
    comando1
    comando2
    comando3
done

Per capire meglio, considera il seguente esempio di codice:

#!/bin/bash
for (( c=1; c<=5; c++ ))
do  
  echo "The number $c"
done

Il codice imposta il valore iniziale del ciclo su 1. Il ciclo verrà eseguito finché la condizione in EXP2 è vera: la variabile code non deve essere maggiore di 5. L’espressione di conteggio contiene il segno ++, che incrementa il valore iniziale di uno ogni volta che il ciclo viene eseguito.

Lo script bash mostrerà un messaggio “$c” che si riferisce al valore del ciclo, partendo da 1 fino a raggiungere la condizione specificata. L’output sarà il seguente:

L’output del ciclo for di Bash a tre espressioni

Come usare un ciclo for di Bash per creare un loop infinito

Creare un ciclo infinito con un ciclo for di Bash ti permette di eseguire il codice all’infinito finché non interrompi il processo manualmente premendo Ctrl + C. Ci sono diversi modi per farlo, ad esempio usando l’espressione while:

while true
do
   echo "Ciao, mondo!"
   sleep 1
done

Quando la condizione è true, il comando stamperà il messaggio Hello, world! con un ritardo di un secondo. Lo snippet usa l’istruzione condizionale while true per fare in modo che il codice restituisca sempre uno stato di uscita positivo.

Poiché la condizione rimane true, il codice continuerà a eseguire in loop il comando echo per stampare il messaggio. Un altro metodo consiste nell’usare il ciclo infinito a tre espressioni:

for (( ; ; ))
do
   echo "Hello, world!"
   sleep 1
done

Nel frammento, impostiamo tutte le espressioni come vuote. Dato che non c’è alcuna condizione di terminazione da soddisfare, il ciclo continuerà finché l’utente non lo interrompe.

L’output del ciclo for infinito in Bash

Come usare un ciclo for di Bash per creare un ciclo con skip e continue

Un ciclo for di Bash ti permette di creare un ciclo che salta un valore specifico e poi continua a essere eseguito. Questa operazione usa la seguente sintassi:

for i in 1 2 3 4 5
do
   if [condizione]
   then
      #Passa all'iterazione successiva di i e salta l'istruzione
      continue
   fi

   istruzione
done

Ecco un esempio di codice di un ciclo skip-and-continue:

for i in {1..5}
do
   if [[ "$i" == '4' ]]
   then
      continue   
   fi
      echo "Hello $i"
done

Nel frammento definiamo come numeri da uno a cinque gli elementi da modificare. Aggiungiamo una condizione if, indicando che quando il valore della variabile è uguale a 4, il ciclo non esegue il codice e passa al valore successivo. Significa che il ciclo opererà su 1, 2, 3 e 5, come mostra l’output:

L’output del ciclo bash skip-continue

Come usare un ciclo for di Bash per creare un’uscita condizionale con break

Un ciclo for di Bash ti permette di creare un ciclo che si interrompe automaticamente quando incontra una condizione specifica, usando il costrutto for-in con questa sintassi:

for i in 1 2 3 4 5
do
   if [condizione]
   then
      break
   fi

   istruzione
done

Puoi aggiungere un altro comando alla fine del codice, che verrà eseguito dopo la fine del ciclo. Considera il seguente esempio:

for state in Alabama Alaska Arizona Arkansas California
do
   if [[ "$state" == 'Arkansas' ]]; then
      break
   fi
   echo "state: $state"
done

echo 'That’s all!'

Lo script del ciclo stampa tutti i nomi degli stati specificati nell’elenco, ma si interrompe non appena viene soddisfatta la condizione di interruzione, cioè quando il valore corrente è uguale ad Arkansas. Poi passa all’istruzione successiva per ripetere il messaggio “That’s all!”. Ecco come appare l’output:

L’output di un ciclo bash con uscita condizionale tramite break

Come usare in modo efficace uno script Bash su Hostinger VPS

Usare un ciclo for di Bash insieme alle funzionalità del tuo fornitore di hosting web può semplificare ulteriormente le attività di amministrazione del server, rendendole più efficienti.

Per esempio, i piani VPS di Hostinger includono un terminale nel browser integrato nel nostro pannello di controllo personalizzato per l’hosting, hPanel. Ti consente di eseguire comandi Linux e utility come bash loop direttamente dal tuo browser web.

Abbiamo un agente AI, Kodee, che semplifica la gestione del VPS per chi è alle prime armi. Per esempio, puoi chiedergli di generare script Bash con cicli for per diverse attività usando prompt semplici come “Puoi generare un ciclo for in Bash che riavvia un elenco di servizi?” oppure “Crea un ciclo for in Bash per eseguire il backup di più directory.”

Per accedere allo strumento, accedi a hPanel e fai click su VPS nel menu in alto. Seleziona il server applicabile e vai su Kodee nella barra laterale. Per ottenere risultati accurati, assicurati che i tuoi prompt AI per lo sviluppo web siano specifici e chiari.

Importante! A causa dei limiti dell’AI, alcune risposte potrebbero essere inaccurate o obsolete.

Punti chiave

Un ciclo for di Bash è ottimo per automatizzare attività ripetitive, elaborare dati e gestire un sistema di tipo UNIX. Per esempio, con una singola esecuzione, puoi scorrere un elenco di nomi per creare automaticamente nuovi utenti quando configuri un nuovo VPS.

Come spiegato, puoi eseguire varie assegnazioni con un ciclo for di Bash combinandolo con altri costrutti di Bash, come for-in. Puoi ampliare ulteriormente le sue funzionalità integrando altri strumenti da riga di comando per creare un modo efficiente di portare a termine un’attività.

Ora che hai capito le basi di un ciclo for in Bash, è il momento di esercitarti a usarlo nelle attività di tutti i giorni. Se usi un VPS Hostinger, chiedere a Kodee di scrivere o scomporre script Bash con cicli for rende il processo di apprendimento più intuitivo e ti aiuta a prendere dimestichezza più rapidamente.

Tutti i contenuti dei tutorial presenti su questo sito web sono soggetti ai rigorosi standard editoriali e ai valori di Hostinger.

Author
L'autore

Faradilla Ayunindya

Faradilla, conosciuta anche come Ninda, è Content Marketing Specialist in Hostinger, con oltre 5 anni di esperienza nel settore e un background di 10 anni come linguista. Si dedica a rendere la tecnologia più accessibile, adattando guide complesse in tutorial chiari e facili da seguire. Nel tempo libero, quando non è impegnata a seguire le ultime tendenze del mondo tech e del digital marketing, ama approfondire temi legati alle scienze della vita o guardare video divertenti di animali. Puoi connetterti con lei su LinkedIn.

Cosa dicono i nostri clienti

Lascia un commento

Please fill the required fields.Please accept the privacy checkbox.Please fill the required fields and accept the privacy checkbox.

Thank you! Your comment has been successfully submitted. It will be approved within the next 24 hours.