¿Cómo puedo sumar (restar, etc.) dos números con bash?

¿Cómo puedo sumar (restar, etc.) dos números con bash?

Puedo leer los números y operar con:

echo "First number please"
read num1
echo "Second number please"
read num2
echo "Operation?"
read op

pero luego todos mis intentos de sumar los números fallan:

case "$op" in
  "+")
    echo num1+num2;;
  "-")
    echo `num1-num2`;;
esac

Correr:

First number please
1
Second mumber please
2
Operation?
+

Producción:

num1+num2

...o...

echo $num1+$num2;;

# results in: 1+2    

...o...

echo `$num1`+`$num2`;;

# results in: ...line 9: 1: command not found

Parece que todavía recibo cadenas cuando intento agregar ("2+2" en lugar de "4").

Respuesta1

Aritmética en shells POSIXse hace con $y doble paréntesis (( )):

echo "$(($num1+$num2))"

Puedes asignar desde eso; También tenga en cuenta que los $operadores en los nombres de las variables internas (())son opcionales):

num1="$((num1+num2))"

También hay expr:

expr $num1 + $num2

En secuencias de comandos $(())es preferible ya que evita una bifurcación/ejecución del exprcomando.

Respuesta2

La respuesta existente es bash puro, por lo que será más rápido que esto, pero solo puede manejar números enteros. Si necesita manejar flotadores, debe utilizar el programa externo bc.

$ echo 'scale=4;3.1415+9.99' | bc
13.1315

Le scale=4indica bcque utilice cuatro decimales. Consulte man bcpara obtener más información.

Respuesta3

También puedes usar $[ ... ]estructura. En este caso, utilizamos el mecanismo integrado en Bash, que es más rápido y un poco más cómodo de usar. Como sabemos que todo entre $[ y ] se trata como una expresión, no necesitamos anteponer las variables con $. Del mismo modo, no debemos protegernos *de tratarlo como una tendencia.

num1=2
num2=3
echo $[num1 + num2]
5

Respuesta4

minimalista

total=0
((total+=qty))

información relacionada