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." />

Nested for loop in Linux Shell Script

By: Dorris  

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.



Archived Comments


Most Viewed Articles (in Linux )

Latest Articles (in Linux)

smskannel SMS gateway run in background

Running jar files in background in ssh window

Can't locate ExtUtils/MakeMaker.pm in @INC ...

Could not open '': No such file or directory at lib/ExtUtils/MM_Unix.pm line 2697

make: Nothing to be done for `all'.

bash: svn: command not found

apxs: command not found

bash: make: command not found

How to burn your CD / DVD ISO image using Nero Burning ROM (Ahead Software) on Windows

How to burn your CD / DVD ISO image using Media Creator (Adaptec/Roxio) on Windows

How to burn your CD / DVD ISO image using Nero Express (Ahead Software) on Windows

How to burn your CD / DVD ISO image using NISO Recorder V2 Power Toy on Windows

Compiling and Installing software from source in Linux

Installing using Debian apt-get in Linux

How to burn your CD / DVD ISO image using k3b on CentOS

Comment on this tutorial