Loops are primary requirement of any programming languages. Loops are useful when you want to execute a series of commands until the certain condition is satisfied. In Bash, loops are useful for automating repetitive tasks. In this tutorial, we will see basics of while loop in Bash.
There are three basic loops for loop,
while loop , and
until loop. We will also learn how to use the
Bash while Loop
while loop is used to perform the given set of commands for
n number of times until the given condition is not met.
Below is the primary form of while loop in Bash:
while [CONDITION] do [COMMANDS] done
In that, the
while statement starts with the
while keyword and followed by the conditional expression.
It will first check the condition before executing the commands. If the condition is true then commands will executed. Otherwise, the loop terminates and program control goes to next command.
Let’s see an example, to print the number which increment by one, until the condition is not true.
i=0 while [ $i -le 5 ] do echo Number: $i ((i++)) done
Loop will iterate until the value of
i is less or equal to five. It will print the following output:
Number: 0 Number: 1 Number: 2 Number: 3 Number: 4 Number: 5
Infinite while Loop
The loop which repeats indefinitely and never terminates is infinite loop. Means until the condition evaluates to true, it will infinite loop.
In the following example, we are using the built-in command
: to create an infinite loop.
: always returns
true. You can also use the true built-in or any other statement that always returns true.
while : do echo "Press <CTRL+C> to exit." sleep 1 done
The above example of
while loop will run indefinitely and will never terminate. You can terminate the loop by pressing
You also can write in single-line like this:
while :; do echo 'Press <CTRL+C> to exit.'; sleep 1; done
Read a File Line By Line
Commonly, the while loop is use to read a file, variable line by line or data stream. Below is given the example to read the
/etc/passwd file line by line and prints each line:
file=/etc/passwd while read -r line; do echo $line done < "$file"
Here, we are controlling the loop using the input redirection (
< "$file") to pass a file to the
read command instead of controlling with a condition. The loop will run until the reading of last line.
It’s recommended to use the
-r option with the read to prevent backslash from acting as an escape character.
read command removes the leading and trailing whitespace by default. To prevent from such behavior you can use the
IFS= option before
file=/etc/passwd while IFS= read -r line; do echo $line done < "$file"
break and continue Statements
You can control the for loop execution by using the
break statement is usually used to terminate the loop when a certain condition is met. It terminates the current loop and passes program control to the statement that follows the terminated statement.
In the below example, the execution of the loop will be terminate once the current iterated item is equal to
i=0 while [ $i -lt 10 ] do echo "Number: $i" ((i++)) if [[ "$i" == '4' ]]; then break fi done echo 'Done!'
Number: 0 Number: 1 Number: 2 Number: 3 Done!
continue statement is used to exit from the current iteration of a loop and go to the next iteration.
In the following example, when the current iterated item is equal to
4 the continue statement will divert control to the beginning of the loop and to continue with the next iteration.
i=0 while [ $i -lt 10 ] do ((i++)) if [[ "$i" == '4' ]]; then continue fi echo "Number: $i" done echo 'Done!'
Number: 1 Number: 2 Number: 3 Number: 5 Number: 6 Number: 7 Number: 8 Number: 9 Number: 10 Done!
In this guide, you learned how to use the while loop in bash script. The while loop is useful when you wants to repeatedly execute a set of commands until the condition is true.
If you have any questions or feedback, feel free to leave a comment.