Я получаю ошибки в этой программе для Армстронга

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
-2
задан 4 July 2017 в 21:58

1 ответ

При объявлении переменных в оболочке вокруг не должно быть никакого пробела (пробелов) =.

В Вашем случае давайте проводить одну строку, например: b= `expr $a % 10`, Вы пытаетесь сохранить вывод замены команды `expr $a % 10` в переменной b; как после существует пространство b=, Вы - gettimng ошибка. Это верно для всех более поздних случаев также. Так, отбросьте пространство (пространства) после b=.

Как примечание стороны, начните использовать синтаксис замены команды $() вместо более старого и удержанного от использования ` ` избегать проблем как вложенная замена команды и странные проблемы заключения в кавычки:

b=$(expr $a % 10)

Кроме того, необходимо заключить переменные расширения в кавычки, если Вы не ожидаете, что разделение слова и расширение пути произойдут.

1
ответ дан 3 November 2019 в 00:05

Другие вопросы по тегам:

Похожие вопросы: