3
May

Shell Script to Display Multiplication Table

I stumbled upon this while researching some other shell script solutions and thought it was pretty clever and nifty. It came from arachnoid.com and I modified it a bit to take an argument from the command line and adjust the width accordingly so the table doesn’t get messed up.

!/bin/sh

width=`echo $(( $1 * $1 )) | wc -c`
y=1
while [ $y -le $1 ]; do
        x=1
        while [ $x -le $1 ]; do
                printf "% ${width}d" $(( $x * $y ))
                let x++
        done
        echo ""
        let y++
done

Example usage:

$ ./mult_table 12
   1   2   3   4   5   6   7   8   9  10  11  12
   2   4   6   8  10  12  14  16  18  20  22  24
   3   6   9  12  15  18  21  24  27  30  33  36
   4   8  12  16  20  24  28  32  36  40  44  48
   5  10  15  20  25  30  35  40  45  50  55  60
   6  12  18  24  30  36  42  48  54  60  66  72
   7  14  21  28  35  42  49  56  63  70  77  84
   8  16  24  32  40  48  56  64  72  80  88  96
   9  18  27  36  45  54  63  72  81  90  99 108
  10  20  30  40  50  60  70  80  90 100 110 120
  11  22  33  44  55  66  77  88  99 110 121 132
  12  24  36  48  60  72  84  96 108 120 132 144

Just for fun, I went on and modified it a bit more to accept a starting point as well, just in case you’re working with a table that doesn’t fit in your terminal screen (however, some readability improvements could be made):

#!/bin/sh

if [ $# -lt 2 ]; then
        echo "Usage: $0 <start> <finish>"
else
        width=`echo $(( $2 * $2 )) | wc -c`
        y=$1
        while [ $y -le $2 ]; do
                x=$1
                while [ $x -le $2 ]; do
                        printf "% ${width}d" $(( $x * $y ))
                        let x++
                done
                echo ""
                let y++
        done
fi

Example usage:

$ ./mult_table 5 12
  25  30  35  40  45  50  55  60
  30  36  42  48  54  60  66  72
  35  42  49  56  63  70  77  84
  40  48  56  64  72  80  88  96
  45  54  63  72  81  90  99 108
  50  60  70  80  90 100 110 120
  55  66  77  88  99 110 121 132
  60  72  84  96 108 120 132 144

Feel free to donate if this post prevented any headaches! Another way to show your appreciation is to take a gander at these relative ads that you may be interested in:


There's 2 Comments So Far

  • David
    April 23rd, 2012 at 7:14 pm

    I do have one noob question…

    in this part of the code:
    while [ $x -le $2 ]; do
    printf “% ${width}d” $(( $x * $y ))
    let x++

    What does “let x++” mean?

    I come upon this, and I cannot find the answer anywhere 🙁

  • [email protected]
    April 23rd, 2012 at 9:09 pm

    It’s a counter. It just means increment i by 1. Another way to do this would be with:
    let x = x + 1

    In programming languages like C++, the following are all equivalent:
    int x = 0;
    x = x + 1;
    x += 1;
    x++;
    // x would be 3 at this point.

Share your thoughts, leave a comment!