次のように数値と演算を読み取ることができます:
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
おそらく、add を実行しようとすると、まだ文字列が取得されるようです ("4" ではなく "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
は、小数点以下 4 桁を使用するようscale=4
指示します。詳細については、を参照してください。bc
man bc
答え3
構造を使用することもできます$[ ... ]
。この場合、Bash に組み込まれたメカニズムを使用します。これはより高速で、より便利です。$[、] の間にあるすべてが式として扱われることがわかっているので、変数の前に を付ける必要はありません$
。同様に、パターンのように扱うことを禁止する必要もありません*
。
num1=2
num2=3
echo $[num1 + num2]
5
答え4
ミニマリスト
total=0
((total+=qty))