Using Bash's C-style for loops

Bash extends the for keyword to provide functionality similar to the three-argument for loop used in C:

#!/bin/bash
for ((i = 1 ; i <= 10 ; i++)) ; do
    printf '%u\n' "$i"
done

The preceding code prints the numbers from 1 to 10, each terminated by a newline, by assigning each number to the i variable in turn and then printing it. When followed by an unquoted ((, the meaning of for changes; it does not iterate over a list of words, but instead loops using the three semicolon-separated statements in the double parentheses like so:

If you want to read the help topic for this feature, you will need to quote it: help 'for (('.

You will sometimes read shell scripts that use the non-standard seq tool to do something similar to this:

# Not recommended
for i in $(seq 1 10) ; do
    printf '%u\n' "$i"
done

If Bash is available on your system, the for loop is somewhat easier to read, affords greater control, and does not rely on the availability of seq.