How can I iterate through a simple range of ints using a for loop in ksh?
For example, my script currently does this...
for i in 1 2 3 4 5 6 7
do
Just a few examples I use in AIX because there is no range operator or seq, abusing perl instead.
Here's a for loop, using perl like seq:
for X in `perl -e 'print join(" ", 1..10)'` ; do something $X ; done
This is similar, but I prefer while read loops over for. No backticks or issues with spaces.
perl -le 'print "$_ " for 1..10;' | while read X ; do xargs -tn1 ls $X ; done
My fav, do bash-like shell globbing, in this case permutations with perl.
perl -le 'print for glob "e{n,nt,t}{0,1,2,3,4,5}"' | xargs -n1 rmdev -dl
ksh93, Bash and zsh all understand C-like for
loop syntax:
for ((i=1; i<=9; i++))
do
echo $i
done
Unfortunately, while ksh and zsh understand the curly brace range syntax with constants and variables, Bash only handles constants (including Bash 4).
While loop?
while [[ $i -lt 1000 ]] ; do
# stuff
(( i += 1 ))
done
Curly brackets?
for i in {1..7}
do
#stuff
done
seq - but only available on linux.
for i in `seq 1 10`
do
echo $i
done
there are other options for seq. But the other solutions are very nice and more important, portable. Thx
on OpenBSD, use jot:
for i in `jot 10`; do echo $i ; done;