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 ?
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
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 expressions and offer a rich variety of operators,
including the use of the comma to put multiple operations within one
expression:
for (( i=0, j=0 ; i+j < 10 ; i++, j++ )) do echo $((i*j)) done
That for
loop initializes two
variables (i
and j
), then has a more complex second expression
adding the two together before doing the less-than comparison. The comma
operator is used again in the third expression to increment both
variables.
18.226.165.131