我在这个程序中遇到了阿姆斯特朗数的错误

我在这个程序中遇到了阿姆斯特朗数的错误
echo "Enter the no"
read a
echo "The number is:"
echo $a
b=  `expr $a % 10`
c= `expr $a / 10`
d= `expr $c % 10`
e= `expr $d / 10`
f= `expr $b \* $b \* $b + $d \* $d \* $d + $e \* $e \* $e`
if [ $f -eq $a ];then
echo "Armstrong No."
else
echo "Not an Armstrong No"
fi

显示的错误是:

PS:Input no. is 153
Armstrong.sh: line 5: 3: command not found
Armstrong.sh: line 6: 15: command not found
expr: syntax error
expr: syntax error
expr: non-numeric argument
Armstrong.sh: line 10: [: -eq: unary operator expected

答案1

在 shell 中声明变量时,必须周围不能有任何空格=

就您的情况而言,我们以一行为例:b= `expr $a % 10`,您尝试将命令替换的输出保存`expr $a % 10`在变量中b;由于后面有一个空格b=,因此您收到错误。对于所有后续情况也是如此。因此,删除后面的空格b=

附注:开始使用命令替换语法,$()而不是旧的和弃用的语法` `,以避免嵌套命令替换和奇怪的引用问题等问题:

b=$(expr $a % 10)

此外,除非您希望进行单词拆分和路径名扩展,否则您应该引用变量扩展。

相关内容