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 expr
comando.
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=4
indica bc
que utilice cuatro decimales. Consulte man bc
para 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))