bashで計算
概要
bashのshell script内で数値計算する方法をまとめます.追って更新もしていきます.
整数の四則演算
整数の四則演算は$((式))でできます.
剰余は%で,指数は**です.
例1
a=$((23+10))
b=$((23-10))
c=$((23*10))
d=$((23/10))
e=$((23%10))
f=$((2**8))
echo $a $b $c $d $e $f
実行結果
33 13 230 2 3 256
整数の四則演算なので,23/10は2.3でなく2です.
2**8は2の8乗です.
例2
変数を用いて計算する場合、(( ))内では$をつけない.
a=23
b=10
c=$((a/b))
echo $c
実行結果
2
小数の四則演算 (bc)
bcコマンドを使います.
bcによるbash shell scriptでの小数計算
a=23
b=10
c=`echo "scale=3; $a / $b" | bc`
echo $c
bcコマンドが分からなければ、この記事の末尾の おまけ: bc を読んでください.
例: 時刻と時刻の引き算
a=`date +%s.%N`
sleep 1.2
b=`date +%s.%N`
c=`echo "$b - $a" | bc`
echo $c
おまけ: 変数への値の代入
変数aに3を代入,表示するには,以下↓の様に書きます.
a=3
echo $a
非常に有名な注意点ですが、a=3の途中にスペースなどを入れてはいけません。下記↓の様にスペースを入れてa = 3と書くとエラーになります。
a = 3
echo $a
変数aの参照の仕方は、$aまたは${a}です。
a=3
echo $a
echo ${a}
どちらでも良いですが{ }をつけた方が安全です。$aの直後に文字がある場合は${a}と書かないと正しく認識されません.
a=3
echo $ax
echo ${a}x
実行結果↓
3x
↑$axは当然ながら(?)変数aでなく変数axと解釈されます.
${a}xは,変数aとxと解釈され3xと表示れます.
おまけ: bc
bc使用例1
最初にbcコマンドの対話的な実行例を紹介.太字がユーザ入力
$ bc
23+10
33
23/10
2
scale=3
23/10
2.300
初期設定では,scale=0となっており、小数点以下は0桁表示の状態です.
scale=3と設定すると,小数点以下3桁表示の状態になります.これで小数が使えます.
剰余は%、指数は^です.例えば2の8乗は2^8です。
bc使用例2
コマンドラインでの実行は以下でOK.太字がユーザ入力
$ echo 23/10 | bc
2
$ echo "scale=3;23/10" | bc
2.300
bcは平方根関数sqrt()を内蔵しています.bc -lと起動すれば数学ライブラリを使えます.
s() sin関数,c() cos関数,a() atan()関数,l() 自然対数,e() eの累乗.eは自然対数の底,j(n,x) ベッセル関数.
例
$ bc -l
s(3.14/2)
.99999968293183462021
pi=4*a(1)
pi
3.14159265358979323844
s(pi/2)
1.00000000000000000000