Miten voin lisätä numeroita bash-skriptissä?

Minulla on tämä bash-skripti ja minulla oli ongelma rivillä 16. Miten voin ottaa rivin 15 edellisen tuloksen ja lisätä siihen sen muuttujaan rivillä 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

Kokonaisluvuille:

  • Käytä aritmeettinen laajennus: $((EXPR))

      num=$((num1 + num2))
      num=$(($num1 + $num2))       # toimii myös
      num=$((num1 + 2 + 3)))        # ...
      num=$$[num1+num2] # vanha, vanhentunut aritmeettinen lausekesyntaksi.
  • Ulkoisen expr-apuohjelman käyttäminen. Huomaa, että tätä tarvitaan vain todella vanhoissa järjestelmissä.

      num=`expr $num1 + $num2` # expr:n välilyönti on tärkeää.

Liukulukulaskennassa:

Bash ei suoranaisesti tue tätä, mutta voit käyttää paria ulkoista työkalua:

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

Voit myös käyttää tieteellistä merkintätapaa (esim. 2.5e+2).


Yleiset sudenkuopat:

  • Muuttujaa asetettaessa ei saa olla välilyöntejä =:n molemmin puolin, muuten komentotulkki tulkitsee ensimmäisen sanan suoritettavan sovelluksen nimeksi (esim. num= tai num).

    num= 1 num =2

  • bc ja expr odottavat jokaista lukua ja operaattoria erillisenä argumenttina, joten välilyönnit ovat tärkeitä. Ne eivät voi käsitellä argumentteja kuten 3+ +4.

    num=`expr $num1+ $num2`

Kommentit (10)

Käytä aritmeettista laajennusta $(( )).

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

Katso lisätietoja osoitteesta http://tldp.org/LDP/abs/html/arithexp.html.

Kommentit (2)

Siihen on tuhat ja yksi tapaa. Tässä yksi, jossa käytetään dc:tä:


dc 
Kommentit (1)