Looping
Besides the if
and
case
statements, the shell's looping
constructs are the workhorse facilities for getting things done.
for Loops
The for
loop iterates
over a list of objects, executing the loop body for each individual
object in turn. The objects may be command-line arguments, filenames,
or anything else that can be created in list format. In Section 3.2.7.1, we
showed this two-line script to update an XML brochure file:
mv atlga.xml atlga.xml.old sed 's/Atlanta/&, the capital of the South/' < atlga.xml.old > atlga.xml
Now suppose, as is much more likely, that we have a number of
XML files that make up our brochure. In this case, we want to make the
change in all the XML files. The for
loop is perfect for this:
for i in atlbrochure*.xml do echo $i mv $i $i.old sed 's/Atlanta/&, the capital of the South/' < $i.old > $i done
This loop moves each original file to a backup copy by appending
a .old
suffix, and then processing
the file with sed to create the new
file. It also prints the filename as a sort of running progress
indicator, which is helpful when there are many files to
process.
The in
list
part of the for
loop is optional. When omitted, the
shell loops over the command-line arguments. Specifically, it's as if
you had typed for i in "$@
":
for i # loop over command-line args do case $i in -f) ... ;; ... esac done
while and until Loops
The shell's while
and
until
loops are similar to loops in
conventional programming languages. The syntax is:
whilecondition
untilcondition
Get Classic Shell Scripting now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.