Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

¿Cómo se pueden sumar dos números en un script de Bash?

14 de junio de 2011

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

#1

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, pero num= 1 y num =1 están mal.
  • bc y expr 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
#2

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