How to Use Bash until Loop

The until loop in Bash is used to repeatedly execute a block of code as long as a specified condition evaluates to false. It is somewhat similar to the while loop, but it continues iterating until the given condition becomes true.

Here's the basic syntax of the until loop:

until [ condition ] do # Code to be executed done

The loop will keep executing the code within the do and done block until the specified condition becomes true.


Now, let's go through an example to illustrate the usage of the until loop:

#!/bin/bash counter=0 until [ $counter -eq 5 ] do echo "Counter is $counter" ((counter++)) done echo "Loop finished"

In this example, the until loop continues to execute as long as the condition [ $counter -eq 5 ] is false. The echo statement inside the loop displays the current value of the counter, and the counter is incremented in each iteration. The loop will terminate once the counter reaches 5.

When you run this script, the output will be:

Counter is 0 Counter is 1 Counter is 2 Counter is 3 Counter is 4 Loop finished

As you can see, the loop iterates until the counter becomes 5, and then it exits.

Here, the condition [ $counter -eq 5 ] checks if the value of the variable counter is equal to 5. You can customize the condition based on your specific requirements.

Waiting for a file to exist

until [[ -f "/path/to/file.txt" ]]; do echo "File doesn't exist yet, waiting..." sleep 5 # Wait for 5 seconds between checks done echo "File found!"

This loop continuously checks if the file /path/to/file.txt exists. It waits 5 seconds between checks using sleep. Once the file is found, the File found! message is printed.

Retrying until a command succeeds

until ping -c 1 &> /dev/null; do echo "Connection failed, retrying..." sleep 10 # Wait for 10 seconds before retrying done echo "Connection established!"

This loop attempts to ping repeatedly until it succeeds. The ping command's exit status is checked to determine success. If the ping fails, the loop waits 10 seconds before retrying.

Interactive countdown

count=10 until [[ $count -eq 0 ]]; do echo "$count..." ((count--)) # Decrement count in each iteration sleep 1 done echo "Blast off!"

This loop counts down from 10 to 0, printing the remaining count in each iteration. It uses the (( )) construct for arithmetic operations.

Additional Notes :

The until loop in Bash is designed to repeatedly execute a block of code as long as a specified condition evaluates to false. Unlike the while loop, the until loop guarantees the execution of its code block at least once, even if the condition is true initially. To prematurely exit the loop, the break statement can be employed when needed. Combining until loops with while loops allows for the creation of more complex logical structures in your scripts.

It is crucial to define conditions carefully to prevent unintentional infinite loops. The loop terminates when the first command in the CONDITION group (separated by spaces) evaluates to true. This feature adds flexibility and control to the flow of your Bash scripts.


The Bash until loop executes a block of code repeatedly as long as a specified condition evaluates to false, ensuring the code within the loop is executed at least once. It can be combined with break for premature exits, used in conjunction with while loops for complex logic, and requires careful definition of conditions to avoid unintended infinite loops.