Cómo puedo añadir números en un script bash

Tengo este script bash y he tenido un problema en la línea 16. ¿Cómo puedo tomar el resultado anterior de la línea 15 y añadirlo a la variable de la línea 16?

#!/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

Para los enteros:

  • Utilice expansión aritmética: $((EXPR))

      num=$((num1 + num2))
      num=$(($num1 + $num2))       # también funciona
      num=$((num1 + 2 + 3))        # ...
      num=$[num1+num2] # sintaxis de expresión aritmética antigua y obsoleta
  • Usando la utilidad externa expr. Tenga en cuenta que esto sólo es necesario para los sistemas realmente antiguos.

      num=`expr $num1 + $num2` # el espacio en blanco para expr es importante

Para punto flotante:

Bash no lo soporta directamente, pero hay un par de herramientas externas que puedes usar:

num=$(awk "BEGIN {print $num1+$num2; exit}")
num=$(python -c "print $num1+$num2")
num=$(perl -e "print $num1+$num2")
num=$(echo $num1 + $num2 | bc)   # whitespace for echo is important

También puedes utilizar la notación científica (por ejemplo: 2.5e+2)


Trampas comunes:

  • Cuando se establece una variable, no puede haber espacios en blanco a ambos lados de =, de lo contrario se forzará al shell a interpretar la primera palabra como el nombre de la aplicación a ejecutar (ej.: num= o num)

    num= 1 num =2

  • bc y expr esperan cada número y operador como un argumento separado, por lo que los espacios en blanco son importantes. No pueden procesar argumentos como 3+ +4.

    num=`expr $num1+ $num2`

Comentarios (10)

Utilice la expansión aritmética $(( )).

num=$(( $num + $metab ))

Consulte http://tldp.org/LDP/abs/html/arithexp.html para obtener más información.

Comentarios (2)

Hay mil y una formas de hacerlo. Aquí'hay una usando dc:


dc 
Comentarios (1)