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
При объявлении переменных в оболочке вокруг не должно быть никакого пробела (пробелов) =
.
В Вашем случае давайте проводить одну строку, например: b= `expr $a % 10`
, Вы пытаетесь сохранить вывод замены команды `expr $a % 10`
в переменной b
; как после существует пространство b=
, Вы - gettimng ошибка. Это верно для всех более поздних случаев также. Так, отбросьте пространство (пространства) после b=
.
Как примечание стороны, начните использовать синтаксис замены команды $()
вместо более старого и удержанного от использования ` `
избегать проблем как вложенная замена команды и странные проблемы заключения в кавычки:
b=$(expr $a % 10)
Кроме того, необходимо заключить переменные расширения в кавычки, если Вы не ожидаете, что разделение слова и расширение пути произойдут.