Bir bash betiğinde sayıları nasıl ekleyebilirim

Bu bash betiğine sahibim ve 16. satırda bir sorun yaşadım. Satır 15'in önceki sonucunu nasıl alabilirim ve satır 16'daki değişkene mi?

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

Tamsayılar için:

  • Aritmetik genişletme]1 kullanın: $((EXPR))

      num=$((num1 + num2))
      num=$(($num1 + $num2))       # ayrıca çalışır
      num=$((num1 + 2 + 3))        # ...
      num=$[num1+num2] # eski, kullanımdan kaldırılmış aritmetik ifade sözdizimi
  • Harici expr yardımcı programını kullanma. Bunun yalnızca gerçekten eski sistemler için gerekli olduğunu unutmayın.

      num=`expr $num1 + $num2` # expr için boşluk önemlidir

Kayan nokta için:

Bash bunu doğrudan desteklemez, ancak kullanabileceğiniz birkaç harici araç vardır:

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

Bilimsel gösterim de kullanabilirsiniz (örneğin: 2.5e+2)


Yaygın tuzaklar:

  • Bir değişken ayarlarken, = ifadesinin her iki tarafında da boşluk bırakamazsınız, aksi takdirde kabuk ilk kelimeyi çalıştırılacak uygulamanın adı olarak yorumlamaya zorlanır (örn: num= veya num)

    num=1 num =2

  • bcveexprher sayı ve işleci ayrı bir argüman olarak bekler, bu nedenle boşluk önemlidir. 3+ +4 gibi argümanları işleyemezler.

    num=`expr $num1+ $num2`

Yorumlar (10)

$(( ))` aritmetik açılımını kullanın.

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

Daha fazla bilgi için http://tldp.org/LDP/abs/html/arithexp.html adresine bakınız.

Yorumlar (2)

Bunu yapmanın bin bir yolu var. İşte dc kullanan bir tanesi:


dc 
Yorumlar (1)