You can use the following syntax for setting up ranges:
However, the following will not work:
#!/bin/bash
for i in {1..5}
do
echo "$i"
done
#!/bin/bash
START=1
END=5
for i in {$START..$END}
do
echo "$i"
done
Recommended solution
To fix this problem use three-expression bash for loops syntax which share a common heritage with the C programming language. It is characterized by a three-parameter loop control expression; consisting of an initializer (EXP1), a loop-test or condition (EXP2), and a counting expression (EXP3):Sample outputs:
#!/bin/bash
START=1
END=5
echo "Countdown"
for (( c=$START; c<=$END; c++ ))
do
echo -n "$c "
sleep 1
done
echo
echo "Boom!"
Countdown
1 2 3 4 5
Boom!
while...do..done
Another option is to use the bash while statement which is used to execute a list of commands repeatedly:
#!/bin/bash
START=1
END=5
## save $START, just in case if we need it later ##
i=$START
while [[ $i -le $END ]]
do
echo "$i"
((i = i + 1))
done
Fixing the original code with eval
With eval builtins the arguments are concatenated together into a single command, which is then read and executed:
#!/bin/bash
START=1
END=5
for i in $(eval echo "{$START..$END}")
do
echo "$i"
done
A note about iterate through an array
The Bash shell support one-dimensional array variables and you can use the following syntax to iterate through an array:Sample outputs:
#!/bin/bash
## define an array ##
arrayname=( Dell HP Oracle )
## get item count using ${arrayname[@]} ##
for m in "${arrayname[@]}"
do
echo "${m}"
# do something on $m #
done
Dell
HP
Oracle
No comments:
Post a Comment