the expr \*

$ cat > mtable
#!/bin/sh
#
#Script to test for loop
#
#
if [ $# -eq 0 ]
then
echo "Error - Number missing form command line argument"
echo "Syntax : $0 number"
echo "Use to print multiplication table for given number"
exit 1
fi
n=$1
for i in 1 2 3 4 5 6 7 8 9 10
do
echo "$n * $i = `expr $i \* $n`"
done

what is meant by `expr $i \* $n`, why cant it be just `expr $i * $n`" instead without the \.

At first glance you might think that because the parameters to the echo are placed within double quotes that there'd be no expansion of the splat (*) in the expression command. However, the shell treats everything between backquotes as an independent string, and thus it's contents need to be further protected.

You should be able to code it this way if using a backslash bothers you:

echo "$n * $i = `expr $i '*' $n`"

Further info if you need it....
If the splat isn't escaped or quoted within the backtick string, the shell will expand the "wildcard" to be all files in the current working directory and the expression command will generate a syntax error.