Multiplication with expr in shell script

99封情书 提交于 2019-11-28 11:16:55
hongo

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` 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!