I am making a basic calculator to add, subtract, multiply, and divide.
Addition works, but not multiplication. When I attempt to multiply, I get the "You did not run the program correctly" response:
$ ./calculator 4 + 5
9
$ ./calculator 4 * 5
You did not run the program correctly
Example: calculator 4 + 5
I've searched around on google, where I found the \\*
code, but still doesn't work. Can someone provide me with a solution or explanation?
Here is my code
#!/bin/bash
if [ $# != 3 ]; then
echo You did not run the program correctly
echo Example: calculator 4 + 5
exit 1
fi
if [ $2 = "+" ]; then
ANSWER=`expr $1 + $3`
echo $ANSWER
fi
if [ $2 = "*" ]; then
ANSWER=`expr $1 \\* $3`
echo $ANSWER
fi
exit 0
To multiply using expr command use the \* operator.
expr is a command line Unix utility which evaluates an expression and outputs the corresponding value. expr evaluates integer or string expressions, including pattern matching regular expressions.
You should use \ on the * symbol for multiplication.
Your code has many problems. Here is a fix. *
means "all files in the current directory". To instead mean a literal asterisk/multiplication character, you have to escape it:
./calculator 3 \* 2
or
./calculator 3 "*" 2
You also have to double quote "$2"
, otherwise *
will start meaning "all files" again:
#!/bin/bash
#Calculator
#if [ `id -u` != 0 ]; then
# echo "Only root may run this program." ; exit 1
#fi
if [ $# != 3 ]; then
echo "You did not run the program correctly"
echo "Example: calculator 4 + 5"
exit 1
fi
# Now do the math (note quotes)
if [ "$2" = "+" ]; then echo `expr $1 + $3`
elif [ "$2" = "-" ]; then echo `expr $1 - $3`
elif [ "$2" = "*" ]; then echo `expr $1 \* $3`
elif [ "$2" = "/" ]; then echo `expr $1 / $3`
fi
exit 0
The *
needs to get escaped since it is a special char in shell syntax. (If not escaped, it will get expanded to the list of all files in the current directory). But you need to use just a single backslash in order to escape it:
ANSWER=`expr $1 \* $3`
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With