Bash スクリプトに数字を追加するにはどうすればいいですか? 質問する

Bash スクリプトに数字を追加するにはどうすればいいですか? 質問する

この Bash スクリプトがあり、16 行目に問題がありました。15 行目の前の結果を取得して、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

ベストアンサー1

整数の場合:

  • 使用算術拡張:$((EXPR))

    num=$((num1 + num2))
    num=$(($num1 + $num2))       # Also works
    num=$((num1 + 2 + 3))        # ...
    num=$[num1+num2]             # Old, deprecated arithmetic expression syntax
    
  • 外部exprユーティリティを使用します。これは非常に古いシステムにのみ必要であることに注意してください。

    num=`expr $num1 + $num2`     # Whitespace for expr is important
    

浮動小数点の場合:

Bash はこれを直接サポートしていませんが、使用できる外部ツールがいくつかあります。

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

科学的記数法 (例: 2.5e+2) を使用することもできます。


よくある落とし穴:

  • 変数を設定するときは、 の両側に空白を入れることはできません=。そうしないと、シェルは最初の単語を実行するアプリケーションの名前として解釈することになります(たとえば、num=またはnum)。

    num= 1 num =2

  • bcexprそれぞれの数値と演算子は別々の引数として想定されるため、空白が重要になります。 のような引数は処理できません3+ +4

    num=`expr $num1+ $num2`

おすすめ記事