【发布时间】:2016-05-18 16:12:36
【问题描述】:
在“+”、“-”、“/”的情况下程序运行良好
例子:
./calculate.sh 1 + 2 ==> output is 3.
但这里的问题是当我输入时:
./calculate.sh 1 * 2 ==>output is "Please ..."
我已经尝试过这样的"\*",但变量 $2 似乎无法得到我想要的。
任何人都可以帮助我这里有什么问题?
#!/bin/sh
if [ $# -ne 3 ]
then
echo "Please input a number , an operator + or - or * or /"
else
case "$2" in
"+") echo "Sum is `expr $1 + $3`";;
"-") echo "Substraction is `expr $1 - $3`";;
"*") echo "Product is `expr $1 \* $3`";;
"/") echo "Division is `expr $1 / $3`";;
esac
fi
【问题讨论】:
-
它确实适用于
./calculate.sh 1 '*' 2。请提供确切您在引用该论点时看到的不当行为的详细信息;否则,这是 CNR(无法重现)。 -
也就是说,
expr是古老的——现代 POSIX sh 进行数学运算的方法是$(( $1 * $3 )),它更高效(不涉及分叉子外壳)。 -
(顺便说一句——不要在可执行脚本上使用
.sh扩展名;可执行脚本定义命令,而命令没有扩展名——你运行ls,而不是@ 987654331@。扩展适用于旨在获取源的 shell 库,而不是用于执行的脚本;另请参阅 talisman.org/~erlkonig/documents/…)。 -
您尝试过
\*或"\*"吗?如果您使用引号 和 反斜杠,则反斜杠将保留在字符串中,因此它不会匹配任何情况。 -
@Barmar, ...这取决于引号是用于文字还是 StackOverflow 格式。您已经编辑了问题,澄清了支持后一种解释的模棱两可,但我认为在 OP 验证该假设之前,以任何程度的确定性发表声明是轻率的。
标签: linux shell operating-system