There are so many different ways to create bash loops. Let's just look at a few. After the first, I'll only list the initial line:
for i in 1 2 3 4 cow
do
echo $i
done
# alternate:
for i in 1 2 3 4 cow; do echo $i;done
for i in `seq 1 10`
for ((j=1; j <= 10; j+=2))
while ((x++ < 10))
until ((x-- < -10))
for i in $(ls)
for in in `cat /tmp/somefile`
Two other commands are useful within loops: "break" exits a loop, and "continue" goes to the next iteration:
for i in 1 2 3 4 cow 6 7 8
do
# skips "cow"
((i * 1 == 0)) && continue
echo $i
done
for i in 1 2 3 4 cow 6 7 8
do
# stops after "4"
((i * 1 == 0)) && break
echo $i
done
Arrays can be looped:
array=(one two three)
for x in ${array[@]}
do
echo $x
done
array=(one two three)
for ((x=0; x < ${#array[@]} ; x++))
do
echo ${array[$x]}
done
A problem that often comes up for new users is looping over certain files. For example, you might want to do something to every .txt file:
for i in *.txt
do
something $i
done
That works, but if there are no ".txt" files, "something" gets passed "*.txt" just the same. If that's not a good thing, you need to do more:
if `ls *.txt > /dev/null 2>&1`
then
for i in *.txt
do
something $i
done
fi
Or you might do something like this:
count=`ls *.txt 2>/dev/null | wc -l`
if [ "$count" -gt 0 ]
then
echo "$count files to back up"
for i in *.txt
do
something $i
done
fi
Yet another way to do something like that is:
set -- *.txt
[ -f "$1" ] && dosomething *.txt
If the set gets nothing, $1 will be empty. Another advantage is that you don't loop over each file if you don't need to.
As you've seen, there are a lot of different ways to do bash looping. Which you use depends mostly on on what you are trying to accomplish, and to a lesser extent on your own style and preferences.
Enter your email address for automatic notification of new posts here
(be sure to whitelist 'feedburner.com' if you use spam filtering)
| Views for this page | ||||
|---|---|---|---|---|
| Today | This Week | This Month | This Year | Overall |
| 6 | 102 | 265 | 2,994 | 5,991 |
Have you tried Searching this site?
Unix/Linux/Mac OS X support by phone, email or on-site: Support Rates
This is a Unix/Linux resource website. It contains technical articles about Unix, Linux and general computing related subjects, opinion, news, help files, how-to's, tutorials and more. We appreciate comments and article submissions.

Add your comments