FUNDAMENTALS A Complete Guide for Beginners
To create an infinite loop in Bash, select the while loop and keep the loop condition true. It is a structure that repeats a set of commands indefinitely. It tirelessly continues as long as the loop remains uninterrupted. This is an excellent approach to automating complex tasks and doing certain operations repetitively before a specific scenario occurs. In this article, I will explore the infinite loop in Bash.
7 Cases of Infinite Loop in Bash
An infinite loop can be achieved using a for loop, a while loop, or an until loop. Here, I will show you how to create an infinite loop, control an infinite loop, exit an infinite loop, create a nested infinite loop, and handle signals.
1. Creating Infinite “for” Loop in Bash
A for loop does not have any initialization, loop condition, or iteration expression. An infinite for loop will execute the code block inside it repeatedly unless CTRL+C is pressed or the break command terminates the loop. Here is a bash script to create an infinite for loop:
#!/bin/bash
for (( ; ; ))
do
echo "Press CTRL+C to stop the loop."
sleep 1
done
The for (( ; ; ))
starts an infinite for loop without initialization, condition, or iteration expression. Then the echo command prints a message on the terminal repeatedly.
2. Exit Infinite Loop in Bash Using “case” Statement
The infinite loop continues execution until the break command is encountered within the loop. The programmers can set a conditional break statement incorporating it in the case statement to terminate the bash script on a specific loop condition. Here is a Bash script to exit infinite for loop in bash using a case statement:
#!/bin/bash
for (( ; ; ))
do
echo "Enter yes, no, or quit: "
read r
case $r in
yes) echo "Given: yes";;
no) echo "Given: no";;
quit)
echo "Terminating the loop."
break ;;
*)
echo "Invalid input. Please enter yes, no, or quit." ;;
esac
done
The read command reads input from the user as variable r. Then the case statement looks to match the r with yes, no, and quit and prints a message according to the match result.
3. Nested Infinite Loops in Bash
In a nested loop combination, the inner, outer, or both loops can be infinite. This type of nested infinite loop is necessary to iterate over complex patterns, multidimensional data, and simulating grids or matrics. Here is a bash script having a nested infinite loop:
#!/bin/bash
count_out=1
for (( ; ; ))
do
count_in=1
while [ $count_in -le 5 ]
do
echo "$count_out.$count_in"
sleep 1
((count_in++))
done
((count_out++))
done
Here, for (( ; ; ))
initiates an infinite outer for loop. Then, while [ $count_in -le 5 ]
initiates the inner loop that iterates as long as the count_1
value is less than or equal to 5 and prints a combination of the values of a count_in
and count_out
variable on each iteration.
4. Controlling Infinite Loops with ‘break’ Statement
The loop condition for an infinite loop is, by default, true. Using a break statement inside an if statement is an efficient approach for terminating the loop. Here is a bash script where the break statement controls an infinite loop:
#!/bin/bash
a=10
for (( ; ; ))
do
echo $a
((a--))
if [ $a -lt 5 ]; then
break;
fi
done
echo "Value of a is out of condition."
The for (( ; ; ))
initiates an infinite loop, then the echo command prints the value of a, and then ((a--))
decreases the value of a by one. After that, the if [ $a -lt 5 ]
checks whether a is less than 5. If so, then the break command terminates the loop.
5. Handling Signals in Infinite Loops
The trap command executes a predefined command according to the signal it receives. It is a tool to print a specific message on the terminal when an infinite loop gets interrupted. Here is a bash script which will do such:
#!/bin/bash
trap 'echo "The Infinite Loop interrupted"; exit' INT
for (( ; ; ))
do
echo "The Infinite Loop Executing…"
sleep 1
done
The trap 'echo "The Infinite Loop interrupted"; exit' INT
command sets up a signal trap which specifies to print a message when an interrupt signal is generated by pressing CTRL+C and exits the script. After that, for (( ; ; ))
initiates an infinite while loop.
6. Infinite “until” Loop in Bash
The until loop executes a set of commands inside it as long as the loop condition remains false. Setting the until loop condition constant to false makes an infinite until loop. Being an infinite until loop, it can execute repeatedly unless loop conditions become true or the break statement terminates the loop. Here is a Bash script containing an infinite until loop:
#!/bin/bash
until false
do
echo "This is an infinite loop. Press [Ctrl+C] to exit."
sleep 1
done
The until false
initiates an infinite until loop as the condition of the until loop is false. Nothing from the loop iteration will make the condition false and terminate the infinite loop.
7. Infinite “while” Loop in Bash
Keeping the condition of a while loop makes it an infinite loop. The while loop will iterate as long as the condition is true. This is the most straightforward infinite loop. Here is a Bash script which will execute a while loop infinitely:
#!/bin/bash
while true
do
echo "Press [CTRL+C] to stop the Loop."
sleep 1
done
The while loop conditions are true, which marks an infinite loop. Then, the echo command printed a message on the terminal, and the sleep command paused the execution for 1 second.
Troubleshooting Common Infinite Loop Issues
Infinite loop faces some issues during operation. Some of these issues are listed here:
Loop Running Indefinitely Issue
If the condition remains true during eternal iteration, nothing makes the condition false. Therefore, this loop will run indefinitely. Here is a Bash script having such an issue:
#!/bin/bash
a=10
for (( ; ; ))
do
echo "Counter: $a"
((a++))
sleep 1
done
Infinite Loop Not Running Issue
Infinite loop not running at all is another issue faced by Bash programmers. It happens if the condition of a loop is set as false. In such a situation, the loop will not be executed as nothing is here to alter the condition to true. The bash script below has the same issue:
#!/bin/bash
for (( ; false;))
do
echo 'The loop will never be executed.'
sleep 1
done
Best Practices and Optimization Tips
Some practice, caution, and optimization tips can make the Bash scripting experience efficient and flawless. Here are some tips on this:
- Cross Check: Before executing an infinite loop, check the loop execution with a limited number of iterations. If any issues occur, it can be solved easily.
- Stop Switch: Place a break statement properly or press CTRL+C to interrupt an infinite loop when needed.
- Resource Usage: Operation inside the infinite loop might consume system resources. To limit the system usage in total execution, put the sleep statement to delay some seconds before the next iteration.
Conclusion
In conclusion, the application of infinite loops in Bash is a powerful tool in scripting for various scenarios. This article will help the advanced and beginners learn and implement the infinite loop in Bash, ensuring the smooth and controlled execution of commands.
People Also Ask
How do you make an infinite loop in Bash?
To make an infinite loop in Bash, use a for or while loop with true as a constant loop condition. Thus, the loop runs infinitely until it is explicitly interrupted.
How do you break an infinite loop?
To break an infinite loop, press CTRL+C on the keyboard. It will send a signal to interrupt the execution of the loop, which is running indefinitely.
What is the infinite loop format?
An infinite loop is a loop that executes a set of commands repeatedly indefinitely. It does not depend on any condition to control the execution, determining where to end.
How do I exit a Bash loop?
You can exit a Bash loop by using the break statement. This is a loop control statement that terminates a loop and moves to execute the subsequent commands after the loop.
What type of error is an infinite loop?
The infinite loop is a logical error. Usually, programs are finite sets of commands that execute in a limited time.
What is the difference between finite and infinite loop?
The finite loop is a loop that executes a set of commands repeatedly for a specified number of times. However, an infinite loop executes the same commands repeatedly for countless times.
Related Articles
- 10 Common Bash “for” Loop Examples [Basic to Intermediate]
- How to Iterate Through List Using “for” Loop in Bash
- How to Use Bash “for” Loop with Variable [12 Examples]
- Bash Increment and Decrement Variable in “for” Loop
- How to Use Bash Parallel “for” Loop [7 Examples]
- How to Loop Through Array Using “for” Loop in Bash
- How to Use Bash “for” Loop with Range [5 Methods]
- How to Use Bash “for” Loop with “seq” Command [10 Examples]
- How to Use “for” Loop in Bash Files [9 Practical Examples]
- Usage of “for” Loop in Bash Directory [5 Examples]
- How to Use “for” Loop in One Line in Bash [7 Examples]
- How to Use Bash Continue with “for” Loop [9 Examples]
<< Go Back to For Loop in Bash | Loops in Bash | Bash Scripting Tutorial