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
中具有特殊含义的字符,例如 *
我在 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
中具有特殊含义的字符,例如 *