Estou recebendo erros neste programa para armstrong number

-2
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

os erros exibidos são:

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
    
por Manas Chourey 05.07.2017 / 06:50

1 resposta

1

Ao declarar variáveis no shell, não deve haver espaços em branco ao redor de = .

No seu caso, vamos pegar uma linha, por exemplo: b= 'expr $a % 10' , você está tentando salvar a saída da substituição de comando 'expr $a % 10' na variável b ; como há um espaço após b= , você está obtendo o erro. Isto é verdade para todos os casos posteriores também. Então, solte o (s) espaço (s) depois de b= .

Como uma nota secundária, comece a usar a sintaxe de substituição de comandos $() em vez de ' ' mais antiga e reprovada para evitar problemas como substituição de comandos de aninhamento e problemas de citação estranhos:

b=$(expr $a % 10)

Além disso, você deve citar suas expansões de variáveis, a menos que esteja esperando que a divisão de palavras e a expansão do nome de caminho ocorram.

    
por heemayl 05.07.2017 / 06:57