Introduzione

I loop sono uno dei concetti fondamentali dei linguaggi di programmazione. I loop sono utili quando si desidera eseguire ripetutamente una serie di comandi fino a quando non viene soddisfatta una condizione specifica.

In linguaggi di scripting come Bash, i loop sono utili per automatizzare attività ripetitive. Esistono 3 costrutti di loop di base negli script Bash, for loop, while loop e until a loop.

Questo tutorial spiega le basi del ciclo until in Bash.

Bash until Loop

Il ciclo until viene utilizzato per eseguire un determinato set di comandi fintanto che la condizione data restituisce false.

Il ciclo Bash until assume la forma seguente:

until [CONDITION]
do
  [COMMANDS]
done

La condizione viene valutata prima di eseguire i comandi. Se la condizione è falsa, i comandi vengono eseguiti. Altrimenti, se la condizione restituisce true, il loop verrà terminato e il controllo del programma verrà passato al comando che segue.

Nell'esempio seguente, ad ogni iterazione il ciclo stampa il valore corrente della variabile counter e incrementa la variabile di uno.

#!/bin/bash

counter=0

until [ $counter -gt 5 ]
do
  echo Counter: $counter
  ((counter++))
done

Il ciclo scorre fino a quando la variabile counter ha un valore maggiore di quattro. Lo script produrrà il seguente output:

Counter: 0
Counter: 1
Counter: 2
Counter: 3
Counter: 4
Counter: 5

Esempi

Il seguente script può essere utile se l'host git ha dei tempi di inattività e invece di digitare manualmente git pull più volte fino a quando l'host è online è possibile eseguire lo script una volta. Tenterà di estrarre il repository fino a quando non verrà estratto correttamente.

#!/bin/bash

until git pull &> /dev/null
do
    echo "Waiting for the git host ..."
    sleep 1
done

echo -e "\nThe git repository is pulled."

Lo script stamperà "Aspettando l'host git ..." e si sospenderà (sleep) per un secondo fino a quando l'host git non sarà online. Una volta estratto il repository, verrà stampato "The git repository is pulled.".

Waiting for the git host ...
Waiting for the git host ...
Waiting for the git host ...

The git repository is pulled.

Conclusione

I cicli while e until sono simili tra loro, con la differenza principale che il ciclo while scorre fino a quando la condizione viene valutata true e il ciclo until scorre fino a quando la condizione viene valutata false.