Normally a for loop (Section 35.21) iterates until it has processed all its word arguments. while and until loops (Section 35.15) iterate until the loop control command returns a certain status. But sometimes -- for instance, if there's an error -- you want a loop to immediately terminate or jump to the next iteration. That's where you use break and continue, respectively.
break terminates the loop and takes control to the line after done. continue skips the rest of the commands in the loop body and starts the next iteration. Here's an example of both. An outer loop is stepping through a list of directories. If we can't cd to one of them, we'll abort the loop with break. The inner loop steps through all entries in the directory. If one of the entries isn't a file or isn't readable, we skip it and try the next one.
'...' Section 28.14, || Section 35.14, * Section 1.13, test Section 35.26
for dir in `find $HOME/projdir -type d -print` do cd "$dir" || break echo "Processing $dir" for file in * do test -f "$file" -a -r "$file" || continue ...process $dir/$file... done done
Here we've used break and continue within for loops, after the shell's || operator. But you can use them anywhere within the body of any loop -- in an if statement within a while loop, for instance.
-- JP
Copyright © 2003 O'Reilly & Associates. All rights reserved.