bashを使用して2つの数字を加算または減算するには?

bashを使用して2つの数字を加算または減算するには?

数字を読み、次のように動作します。

echo "First number please"
read num1
echo "Second number please"
read num2
echo "Operation?"
read op

ただし、数値を追加しようとするすべての試みは失敗します。

case "$op" in
  "+")
    echo num1+num2;;
  "-")
    echo `num1-num2`;;
esac

ランニング:

First number please
1
Second mumber please
2
Operation?
+

出力:

num1+num2

...または...

echo $num1+$num2;;

# results in: 1+2    

...または...

echo `$num1`+`$num2`;;

# results in: ...line 9: 1: command not found

"4"の代わりに add("2+2") を追加しようとすると、文字列がまだ表示されるようです。

答え1

POSIXシェルの算術$二重括弧で完成(( )):

echo "$(($num1+$num2))"

ここから割り当てることもできます。$内部変数名の演算子は(())オプションです。

num1="$((num1+num2))"

さらにexpr:

expr $num1 + $num2

コマンドの分岐/実行を防ぐため、スクリプトに$(())適していますexpr

答え2

既存の答えは純粋なbashなので、これより高速ですが、整数のみを処理できます。浮動小数点数を処理する必要がある場合は、外部プログラムを使用する必要がありますbc

$ echo 'scale=4;3.1415+9.99' | bc
13.1315

scale=4bc小数点4桁を使用するように教えてください。詳細についてはを参照してくださいman bc

答え3

構造を使用することもできます$[ ... ]。この場合は、より高速で使いやすいBashに組み込まれたメカニズムを使用します。 $ [と]の間のすべての内容が式と見なされることがわかっているので、変数の前に追加する必要はありません$。繰り返しますが、私たちは*これをパターンとして見ることを避ける必要はありません。

num1=2
num2=3
echo $[num1 + num2]
5

答え4

ミニマリスト

total=0
((total+=qty))

関連情報