it-swarm-es.com

¿Por qué estoy recibiendo un error de sintaxis con mi aritmética de shell?

Tengo un problema con un script de shell de Linux (sh).

Estoy tratando de escribir un script que calcula las combinaciones, pero creo que me desbordan al intentar calcular las facultades. Entonces, estoy intentando otra técnica. En esta técnica utilicé esto:

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

Esto está dando errores, y aparentemente, no puedo hacer esto:

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

porque esto también da errores.

¿Cómo lo hago?

5
3sdmx

Puede usar dc para los resultados de precisión arbitrarios:

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

debe trabajar en cada variante de UNIX desde 1977 o menos. Si sabes que tiene GNU DC disponible, más conciso

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

puede ser usado.

6
msw

Para su ejemplo con Parens, también debe escapar de ellos: expr \( $var1 + $var2 \) / $var3 (y no omite los espacios, o expr se quejará).

En bash También puede usar la expansión aritmética incorporada como esta: echo $(( ($var1+$var2)/$var3 ))

Y para los cálculos de infijo hay bc (mientras que dc es para la notación de polaco inversa).

2
alex