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