Reputation: 1404
From what I've read on stack, here's one syntax :
iterator=0
while [ "$iterator" -lt 100 ]
do
printf "$iterator"
iterator=`expr $iterator + 1 `
done
Anybody cares to improve on this?
Aim is to make an iteration loop that would be most portable on posix systems.
[EDIT] just found this question which has very relevant answers: How do I iterate over a range of numbers defined by variables in Bash? but I'd like an answer here because I believe my question is more precise for future searches.
Upvotes: 1
Views: 2004
Reputation: 33
You could simply do...
while [ "$((iterator+=1))" -le 100 ]; do
printf '%d\n' "$iterator"
done
Upvotes: 0
Reputation: 754700
You probably want a newline in the printf
format; otherwise, the numbers are all printed on a single line with no spacing.
You should use $(…)
in place of the back-ticks.
Even POSIX shells support iterator=$(( $iterator + 1 ))
(where the $(( … ))
notation is distinct from the $( … )
notation!), so you don't need to use expr
.
Putting those together:
iterator=0
while [ $iterator -lt 100 ]
do
printf '%d\n' $iterator
iterator=$(( $iterator + 1 ))
done
There are other options if you have a command such as seq
available, but that isn't a part of POSIX.
There are those who would demand that the variables be enclosed in quotes when referenced. There's no harm in doing so, and in much general code, I would do so. But here the values are strictly controlled by the script; there is no way for blanks or other awkward characters to get in the way of the correct operation of the script.
Upvotes: 3