As you see the if
statement can nested, similarly loop statement can be nested. You can nest
the for loop. To understand the nesting of for loop see the following shell
script.
$ vi nestedfor.sh
for (( i = 1; i <= 5; i++ )) ### Outer
for loop ###
do
for (( j = 1 ; j <= 5; j++ )) ### Inner for
loop ###
do
echo -n
"$i "
done
echo "" #### print the new line ###
done
Run the above script as follows:
$ chmod +x nestedfor.sh
$ ./nestefor.sh
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
Here, for each value of i the
inner loop is cycled through 5 times, with the varible j taking
values from 1 to 5. The inner for loop terminates when the value of j exceeds
5, and the outer loop terminets when the value of i exceeds
5.
Following script is quite intresting, it prints the chess board on screen.
$ vi chessboard
for (( i = 1; i <= 9; i++ )) ### Outer for loop ###
do
for (( j = 1 ; j <= 9; j++ )) ### Inner for loop
###
do
tot=`expr $i + $j`
tmp=`expr $tot % 2`
if [ $tmp -eq 0 ]; then
echo
-e -n "\033[47m "
else
echo
-e -n "\033[40m "
fi
done
echo -e -n "\033[40m" #### set back background colour to
black
echo "" #### print the new line ###
done
Run the above script as follows:
$ chmod +x chessboard
$ ./chessboard
Above shell script cab be explained as follows:
Command(s)/Statements
|
Explanation
|
for (( i = 1; i <= 9; i++ ))
do |
Begin the outer loop which runs 9 times., and the outer
loop terminets when the value of i exceeds
9 |
for (( j = 1 ; j <= 9; j++ ))
do |
Begins the inner loop, for each value of i the
inner loop is cycled through 9 times, with the varible j taking
values from 1 to 9. The inner for loop terminates when the value of j exceeds
9.
|
tot=`expr $i + $j`
tmp=`expr $tot % 2`
|
See for even and odd number positions using
these statements. |
if [ $tmp -eq 0 ]; then
echo -e -n "\033[47m "
else
echo -e -n "\033[40m "
fi
|
If even number posiotion print the white
colour block (using echo
-e -n "\033[47m " statement);
otherwise for odd postion print the black colour box (using echo
-e -n "\033[40m " statement).
This statements are responsible to print entier chess board on screen
with alternet colours. |
done
|
End of inner loop |
echo -e -n "\033[40m"
|
Make sure its black background as we always
have on our terminals. |
echo "" |
Print the blank line |
done |
End of outer loop and shell scripts get
terminted by printing the chess board. |
|