Por que estou recebendo um erro de sintaxe com a aritmética do meu shell?

5

Eu tenho um problema com um script de shell do Linux ( sh ).

Estou tentando escrever um script que calcule combinações, mas acho que estou transbordando quando tentando calcular faculdades. Então, estou tentando outra técnica. Nesta técnica eu usei isso:

a='expr $var1 \* $var2 / $var3'

Isso está causando erros e, com bastante clareza, não consigo fazer isso:

a='expr ($var1 \* $var2) / $var3'

porque isso também causa erros.

Como faço isso?

    
por 3sdmx 30.10.2010 / 22:09

2 respostas

6

Você pode usar dc para resultados de precisão arbitrária:

precision=4 var1=3 var2=4 var3=5
a='echo "$precision k $var1 $var2 * $var3 /p" | dc'

deve funcionar em praticamente todas as variantes do Unix desde 1977. Se você sabe que tem o gnu dc disponível, o mais conciso

a='dc -e "$precision k $var1 $var2 * $var3 /p"'

pode ser usado.

    
por 30.10.2010 / 22:36
2

Para o seu exemplo com parens, você também deve escapar deles: expr \( $var1 + $var2 \) / $var3 (e não omita os espaços, ou expr irá reclamar).

Em bash você também pode usar expansão aritmética incorporada como esta: echo $(( ($var1+$var2)/$var3 ))

E para cálculos de infix, há bc (enquanto dc é para notação de polimento inverso).

    
por 31.10.2010 / 07:44

Tags