Bash While Loop
Introduction
One of the most fundamental ideas in programming languages is the loop. When you want to perform a series of commands repeatedly until a certain condition is met, loops come in handy.
Loops are useful for automating repeated operations in scripting languages like Bash. In Bash scripting, there are three basic loop constructs: for loop, while loop, and until loop.
The fundamentals of while loops in Bash are covered in this tutorial. We will also address a few FAQs on Bash While Loop.
Bash while Loop
The while loop is used to repeat a series of commands an unknown number of times as long as the condition is true.
The Bash while loop is written as follows:
while [CONDITION]
do
[COMMANDS]
done
The while keyword is followed by the conditional phrase in the while statement.
Before the orders are executed, the condition is evaluated. Commands are performed if the condition evaluates to true. If the condition evaluates to false, the loop will be ended, and program control will be given to the next command.
The current value of the variable i is reported and incremented by one in the example below on each iteration.
i=0
while [ $i -le 2 ]
do
echo Number: $i
((i++))
done
As long as i is less than or equal to two, the Tue loop iterates. It will give you the following results:
Output
Number: 0
Number: 1
Number: 2
Infinite while Loop
An endless loop is a loop that never ends and repeats indefinitely. You have an infinite loop if the condition always evaluates to true.
The built-in command : is used to generate an infinite loop in the following example. : always returns true. The true built-in or any other statement that always returns true can also be used.
while :
do
echo "Press <CTRL+C> to exit."
sleep 1
done
The while loop will continue to run indefinitely. By using CTRL+C, you can end the loop.
Here's a single-line version:
while :; do echo 'Press <CTRL+C> to exit.'; sleep 1; done
Read a File Line By Line
Reading a file, data stream, or variable line by line is one of the most common uses of the while loop.
Here's an example of reading and printing each line from the /etc/passwd file:
file=/etc/passwd
while read -r line; do
echo $line
done < "$file"
Instead of using a condition to control the while loop, we use input redirection (< "$file") to send a file to the read command, which controls the loop. The while loop will continue to execute until the last line has been read.
To prevent backslash from acting as an escape character when reading a file line by line, always use read with the -r option.
The read command cuts the starting and trailing whitespace characters by default (spaces and tabs). To avoid this, use the IFS= option before reading:
file=/etc/passwd
while IFS= read -r line; do
echo $line
done < "$file"
break and continue Statements
The while loop can be controlled with the break and continue commands.
break Statement
The break statement ends the current loop and transfers program control to the command that comes after it. When a given condition is met, it is frequently used to end the loop.
When the current iterated item equals 2, the loop will be interrupted, as seen in the following example.
i=0
while [ $i -lt 5 ]
do
echo "Number: $i"
((i++))
if [[ "$i" == '2' ]]; then
break
fi
done
echo 'All Done!'
Output
Number: 0
Number: 1
All Done!
continue Statement
The continue command ends the current loop iteration and moves program control to the next loop iteration.
Once the current iterated item equals 2, the continue statement causes execution to return to the beginning of the loop and continue with the next iteration as seen below.
i=0
while [ $i -lt 5 ]
do
((i++))
if [[ "$i" == '2' ]]; then
continue
fi
echo "Number: $i"
done
echo 'All Done!'
Output
Number: 1
Number: 3
Number: 4
Number: 5
All Done!
FAQs on Bash While Loop
Can I use variables in the while loop's condition?
Yes, you can use variables in the while loop's condition. The variable's value is evaluated for each iteration, and the loop continues as long as the condition evaluates to true.
How do I exit or terminate a while loop prematurely?
To exit or terminate a while loop prematurely, you can use the break statement. When encountered, the break statement transfers control to the first line after the loop.
How do I skip the rest of the current iteration in a while loop?
To skip the remaining code in the current iteration and start the next iteration immediately, you can use the continue statement. When encountered, the continue statement transfers control to the loop condition.
Can I use multiple conditions in a while loop?
Yes, you can use multiple conditions in a while loop by combining them using logical operators such as && (AND) or || (OR). The loop continues until all conditions are true (with &&) or at least one condition is true (with ||).
Can I modify the looping variable inside the while loop?
Yes, you can modify the looping variable inside the while loop. However, it's important to ensure the loop's termination condition is eventually met, or else you risk creating an infinite loop.
How can I simulate a countdown or a reverse loop using a while loop?
To simulate a countdown or a reverse loop, you can use a decrementing variable as part of the condition. For example: counter=10; while (( counter > 0 )); do echo $counter; (( counter-- )); done
Can I use nested while loops in Bash?
Yes, you can use nested while loops in Bash. Nested loops allow you to perform more complex iterations or repeated tasks within each iteration of another loop.
Conclusion
The while loops execute a series of commands periodically as long as a condition is true.
If you have any queries, please leave a comment below and we’ll be happy to respond to them.