Looping with a Count
Problem
You need to loop a fixed number of times. You could use a while
loop and do the counting and testing,
but programming languages have for loops for such a common idiom. How does one do this in
bash ?
Solution
Use a special case of the for
syntax, one that looks a lot like C Language, but with double
parentheses:
$ for (( i=0 ; i < 10 ; i++ )) ; do echo $i ; done
Discussion
In early versions of the shell, the original syntax for the
for
loop only included iterating over
a fixed list of items. It was a neat innovation for such a word-oriented
language as shell scripts, dealing with filenames and such. But when
users needed to count, they sometimes found themselves writing:
for i in 1 2 3 4 5 6 7 8 9 10 do echo $i done
Now that’s not too bad, especially for small loops, but let’s face
it—that’s not going to work for 500 iterations. (Yes, you could nest
loops 5 x 10, but come on!) What you really need is a for
loop that can count.
The special case of the for
loop with C-like syntax is a relatively recent addition to
bash (appearing in version 2.04). Its more general
form can be described as:
for (( expr1 ; expr2 ; expr3 )) ; do list ; done
The use of double parentheses is meant to indicate that these are
arithmetic expressions. You don’t need to use the $ construct (as in
$i
, except for arguments like
$1
) when referring to variables
inside the double parentheses (just like the other places where double
parentheses are used in bash). The expressions are integer arithmetic ...
Get bash Cookbook 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.