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.