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
doneThis 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
donewhile and until Loops
The shell's while and
until loops are similar to loops in
conventional programming languages. The syntax is:
whileconditionuntilcondition
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access