在shell脚本中使用expr进行乘法运算

Ale*_*lfe 8 unix linux bash shell expr

我正在制作一个基本计算器来进行加,减,乘和除.

加法有效,但不是乘法.当我试图繁殖时,我得到"你没有正确运行程序"的回复:

$ ./calculator 4 + 5
9
$ ./calculator 4 * 5
You did not run the program correctly
Example: calculator 4 + 5
Run Code Online (Sandbox Code Playgroud)

我在google上搜索过,在那里我找到了\\*代码,但仍然无法正常工作.有人能为我提供解决方案或解释吗?

这是我的代码

#!/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
Run Code Online (Sandbox Code Playgroud)

hon*_*ngo 18

你的代码有很多问题.这是一个修复.*表示"当前目录中的所有文件".要改为表示文字星号/乘法字符,您必须将其转义:

./calculator 3 \* 2
Run Code Online (Sandbox Code Playgroud)

要么

./calculator 3 "*" 2
Run Code Online (Sandbox Code Playgroud)

您还必须双引号"$2",否则*将再次开始表示"所有文件":

#!/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
Run Code Online (Sandbox Code Playgroud)


hek*_*mgl 6

*需要得到逃脱,因为它是在外壳语法特殊字符.(如果没有转义,它将扩展到当前目录中所有文件的列表).但是你需要使用一个反斜杠来逃避它:

ANSWER=`expr $1 \* $3` 
Run Code Online (Sandbox Code Playgroud)