Tengo el siguiente script de Bash y tengo un problema en la línea que ejecuta num= $num + $metab
:
#!/bin/bash num=0 metab=0 for ((i=1; i<=2; i++)); do for j in `ls output-$i-*`; do echo "$j" metab=$(cat $j|grep EndBuffer|awk '{sum+=$2} END { print sum/120}') (line15) num= $num + $metab (line16) done echo "$num" done
Lo que quiero es coger el resultado almacenado en la variable metab
y sumarlo al valor almacenado en la variable num
. ¿Alguien saber cómo se puede hacer?
Estás leyendo una traducción autorizada de la pregunta
How can I add numbers in a bash script
planteada por Nick
en StackOverflow.
Respuestas
Para números enteros utiliza la expansión aritmética $((EXPR))
num=$((num1 + num2)) # utiliza esto num=$(($num1 + $num2)) # esto también funciona num=$((num1 + 2 + 3)) # no sólo funciona con variables num=$[num1+num2] # funciona, pero no lo uses: notación obsoleta
Si tu sistema es muy antiguo, la notación anterior no funcionará. En ese caso tienes que utilizar la utilidad expr
de la siguiente manera:
num=`expr $num1 + $num2` # para que funcione, mantén los espacios en blanco
Para los números decimales, utiliza lo siguiente:
num=$(echo $num1 + $num2 | bc) # el espacio en blanco es importante para "echo"
Ten cuidado con lo siguiente:
- Cuando defines una variable, no puedes dejar espacios en blanco delante o detrás de
=
. Ejemplo:num=1
está bien, peronum= 1
ynum =1
están mal. bc
yexpr
necesitan que cada número y cada operador aritmético estén separados por un espacio en blanco, así que es muy importante añadirlos. Ejemplo:$num1+ $num2 | bc
está mal y$num1 +$num2 | bc
tampoco funciona.
@librosweb
8 octubre 2014, 23:20
Puedes utilizar num= calc $num1+$num2
Nota: es importante que el comando calc
tenga un espacio de los dos lados, es decir, delante y despues del mismo.
@gustavolopezro
9 septiembre 2015, 0:59