Bash Infinite Loop Examples
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:
#!/bin/bash while : do echo "Press [CTRL+C] to stop.." sleep 1 doneThis 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 true do echo "Press [CTRL+C] to stop.." sleep 1 doneA single-line bash infinite while loop syntax is as follows:
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 ### for (( ; ; )) do echo "Pres CTRL+C to stop..." sleep 1 if (disaster-condition) then break #Abandon the loop. fi doneOR
### while loop example ### while : do echo "Pres CTRL+C to stop..." sleep 1 if (disaster-condition) then break #Abandon the loop. fi doneYou can also use the case statement to esacpe with a break statement:
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
0 comentarios:
Publicar un comentario
Suscribirse a Enviar comentarios [Atom]
<< Inicio