shell expr 错误中的非整数参数

shell non integer argument in expr error

我在 shell 脚本中编写了以下代码:

num=
sum=0; rn=0
less=0; fact=0
while [ $num -gt 0 ]
do
rn=`expr $num % 10`
num=`expr $num / 10`
while [ $rn -gt 1 ]
do
less=`expr %rn - 1`
fact=`expr $rn \* less`
rn=`expr $rn - 1`
done
sum=`expr $sum + $fact`
done
echo $sum

但终端显示以下没有任何行号的错误: Terminal Error pic

请告诉我我哪里搞砸了??

眼前的问题是

less=`expr %rn - 1`

将其更改为

less=`expr $rn - 1`

然后你应该航行回家。但是您也可以使用 bash 的 -x 选项调试您的脚本,这将为您提供逐行分析。

不鼓励使用 expr,因为您可以轻松地将其替换为 ((expression)) 构造(如果需要浮点运算,则可以使用 calc)。那么,

fact=`expr $rn \* $less`

会变得更容易

((fact=rn*less))

优点是您不必费心转义在 shell 中具有特殊含义的字符,例如 *