数字を読み、次のように動作します。
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=4
bc
小数点4桁を使用するように教えてください。詳細についてはを参照してくださいman bc
。
答え3
構造を使用することもできます$[ ... ]
。この場合は、より高速で使いやすいBashに組み込まれたメカニズムを使用します。 $ [と]の間のすべての内容が式と見なされることがわかっているので、変数の前に追加する必要はありません$
。繰り返しますが、私たちは*
これをパターンとして見ることを避ける必要はありません。
num1=2
num2=3
echo $[num1 + num2]
5
答え4
ミニマリスト
total=0
((total+=qty))