As nice as looping in Linux scripts can be, you might just want to interrupt it sometimes, and the break and continue commands can do this. Credit: tine ivanic The commands for looping in bash are extremely useful. They allow you to run a series of commands as many times as needed to process a large collection of data. The break and continue commands provide another special option. They allow you to exit a loop early or skip the remaining commands in the loop and return to the beginning. Both the break and the continue commands are meant to be used only in for, while and until loops. In fact, if you try to invoke the break command on its own, bash will tell you just that. $ break -bash: break: only meaningful in a `for', `while', or `until' loop If you ask about either command using the which command, which will respond as if it doesn’t have any idea what you’re referring to. After all, neither break nor continue is implemented as an executable file, so the which command is not going to find a pathname for you. Instead, both commands are simply built into bash. Using the break command If you want to exit a loop before all the commands in the loop have been run and all of the loop values have been processed, this command is just what you need; it provides a way to exit a loop prematurely. Here’s a simple illustration of what happens if a particular condition is met and the break command is run: for, while or until loop do command1 command2 if [ condition ]; then break =================+ fi | command3 | done | command4 The break command exits the loop and moves to whatever command follows it. In the example below, we give the person running the script 10 tries to guess a random number generated by the shuf command. If the person guesses the correct number, the guess is confirmed and the loop exits. Otherwise, it runs through the loop the full ten times. #!/bin/bash # generate a single random number random=`shuf -i 0-99 -n1` echo "10 tries to guess my favorite 1- or 2-digit number!" for ((try=1; try Run the command, and you’ll see something like this: $ break1 10 tries to guess my favorite 1- or 2-digit number! guess 1: 3 guess 2: 27 guess 3: 11 You got it! Using a while loop would work the same. #!/bin/bash # generate a single random number random=`shuf -i 0-99 -n1` try=1 echo "10 tries to guess my favorite 1- or 2-digit number!" while [ $try -le 10 ] do echo -n "guess $try: " read guess if [ $guess == $random ]; then echo "You got it!" break fi ((try=try+1)) done This next example uses an until loop. #!/bin/bash # generate a single random number random=`shuf -i 0-99 -n1` try=1 echo "10 tries to guess my favorite 1- or 2-digit number" until [ $try -gt 10 ] do echo -n "guess $try: " read guess if [ $guess == $random ] then echo "You got it!" break fi ((try=try+1)) done The continue command The continue command works similarly to break, but it doesn’t exit the loop unless it’s on its last pass through it. Otherwise, it skips the remaining commands in the loop and returns to the top to continue. for, while or until loop In the example below, the script accepts a list of arguments like “cats dogs fish” and inserts a comma between them except for the last argument. #!/bin/bash numargs=$# list="" lastarg=${!#} if [ $numargs > 0 ]; then for arg in `echo $@` do if [ $arg == $lastarg ]; then continue fi list="$list$arg," done fi echo $list$lastarg Here’s an example of running it: $ cont1 cats dogs fish cats,dogs,fish Using break and continue with loops inside loops The continue command also has the ability to go back to the top of an outer loop. If you have a script which has a loop inside a loop, using continue with a numeric argument (e.g., continue 2) will take it back to the start of the outer loop rather than the current one. In the simple script below, any time the numbers being compared in the inner loop are equal, the script moves back to the outer loop. #!/bin/bash for i in {1..3} do for j in {1..3} do if [[ $i -eq $j ]] then echo "$i = $j" continue 2 fi echo "$i != $j" done done Using an argument also works with the break command. Using break 2, for example, would cause the script to exit both the current loop and the outer loop. The diagram below illustrates this. Notice how the break command exits both loops. for, while or until loop do command1 for, while or until loop do command2 if [ condition ]; then break 2 =============+ command3 | fi | done | command4 | done | command5 Wrap-Up The break and continue commands allow you to exit loops in bash scripts or skip remaining commands and go back to the top of a loop depending on particular situations. They can be very handy when you need to skip some commands depending on the data you are processing. Related content how-to Compressing files using the zip command on Linux The zip command lets you compress files to preserve them or back them up, and you can require a password to extract the contents of a zip file. By Sandra Henry-Stocker May 13, 2024 4 mins Linux opinion NSA, FBI warn of email spoofing threat Email spoofing is acknowledged by experts as a very credible threat. By Sandra Henry-Stocker May 13, 2024 3 mins Linux how-to The logic of && and || on Linux These AND and OR equivalents can be used in scripts to determine next actions. By Sandra Henry-Stocker May 02, 2024 4 mins Linux how-to Using the apropos command on Linux By Sandra Henry-Stocker Apr 24, 2024 3 mins Linux PODCASTS VIDEOS RESOURCES EVENTS NEWSLETTERS Newsletter Promo Module Test Description for newsletter promo module. Please enter a valid email address Subscribe