Hoe kan ik getallen toevoegen in een bash script

Ik heb dit bash script en ik had een probleem in regel 16. Hoe kan ik het vorige resultaat van regel 15 nemen en toevoegen het aan de variabele in regel 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

Voor gehele getallen:

  • Gebruik rekenkundige uitbreiding: $((EXPR))

      num=$((num1 + num2))
      num=$(($num1 + $num2))       # werkt ook
      num=$((num1 + 2 + 3))        # ...
      num=$[num1+num2] # oude, verouderde rekenkundige uitdrukking syntaxis
  • Gebruik de externe expr utility. Merk op dat dit alleen nodig is voor echt oude systemen.

      num=`expr $num1 + $num2` # spatie voor expr is belangrijk

Voor drijvende komma:

Bash ondersteunt dit niet direct, maar er zijn een paar externe tools die je kunt gebruiken:

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

Je kunt ook wetenschappelijke notatie gebruiken (bijv.: 2.5e+2)


Gemeenschappelijke valkuilen:

  • Als je een variabele instelt, kun je geen spaties aan weerszijden van = hebben, anders wordt de shell gedwongen het eerste woord te interpreteren als de naam van de applicatie die moet worden uitgevoerd (bijv: num= of num)

    num= 1 num =2

  • bc en expr verwachten elk getal en elke operator als een apart argument, dus witruimte is belangrijk. Ze kunnen geen argumenten als 3+ +4 verwerken.

    num=`expr $num1+ $num2`

Commentaren (10)

Gebruik de $(( )) rekenkundige uitbreiding.

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

Zie http://tldp.org/LDP/abs/html/arithexp.html voor meer informatie.

Commentaren (2)

Er zijn duizend-en-één manieren om het te doen. Hier's een met dc:


dc 
Commentaren (1)