An infinite loop is nothing but a sequence of instructions which loops endlessly, either due to the loop having no terminating condition, having one that can never be met, or one that causes the loop to start over. The syntax is as follows using the while loop:
This is a loop that will forever print "Press [CTRL+C] to stop..". Please note that : is the null command. The null command does nothing and its exit status is always set to true. You can modify the above as follows to improve the readability:
#!/bin/bash
while :
do
echo "Press [CTRL+C] to stop.."
sleep 1
done
A single-line bash infinite while loop syntax is as follows:
#!/bin/bash
while true
do
echo "Press [CTRL+C] to stop.."
sleep 1
done
while :; do echo 'Hit CTRL+C'; sleep 1; doneOR
while true; do echo 'Hit CTRL+C'; sleep 1; done
Bash for infinite loop example
#!/bin/bash
for (( ; ; ))
do
echo "Pres CTRL+C to stop..."
sleep 1
done
How Do I Escape the Loop?
A for or while loop may be escaped with a break statement when certain condition is satisfied:### for loop example ###OR
for (( ; ; ))
do
echo "Pres CTRL+C to stop..."
sleep 1
if (disaster-condition)
then
break #Abandon the loop.
fi
done
### while loop example ###You can also use the case statement to esacpe with a break statement:
while :
do
echo "Pres CTRL+C to stop..."
sleep 1
if (disaster-condition)
then
break #Abandon the loop.
fi
done
while :
do
### add some input and output here ###
case $var in
yes) do something ;;
no) do something ;;
quit) break ;; ##Abandon the loop.
ease
done
Example
A sample shell script to demonstrate the actual usage of an infinite loop and the break statement:#!/bin/bash
# Purpose: Display various options to operator using menus
# Author: Vivek Gite < vivek @ nixcraft . com > under GPL v2.0+
# ---------------------------------------------------------------------------
# capture CTRL+C, CTRL+Z and quit singles using the trap
trap '' SIGINT
trap '' SIGQUIT
trap '' SIGTSTP
# display message and pause
pause(){
local m="$@"
echo "$m"
read -p "Press [Enter] key to continue..." key
}
# set an
while :
do
# show menu
clear
echo "---------------------------------"
echo " M A I N - M E N U"
echo "---------------------------------"
echo "1. Show current date/time"
echo "2. Show what users are doing"
echo "3. Show top memory & cpu eating process"
echo "4. Show network stats"
echo "5. Exit"
echo "---------------------------------"
read -r -p "Enter your choice [1-5] : " c
# take action
case $c in
1) pause "$(date)";;
2) w| less;;
3) echo '*** Top 10 Memory eating process:'; ps -auxf | sort -nr -k 4 | head -10;
echo; echo '*** Top 10 CPU eating process:';ps -auxf | sort -nr -k 3 | head -10;
echo; pause;;
4) netstat -s | less;;
5) break;;
*) Pause "Select between 1 to 5 only"
esac
done
No comments:
Post a Comment