数値計算するbcコマンドが便利

こんにちは suganoo です。

シェルスクリプトを書いてたりLinuxのコマンドをたたいてると単純な計算をしたいときがあります。

単純な足し算やfor文内のインクリメントとか。

そんなんであれば $((...)) でどうにかなります。

例えば足し算なら

CNT=$(( CNT + 1 ))

とか

forループとかだとこんな感じ

CNT=0
for MUDA in {1..10}
do
  CNT=$(( CNT + 1 ))
done
echo ${CNT}

ですが、例えば wc -l でいくつかのファイルの行数を取って来てて合算したいとか、du -sm でファイルサイズ取って来てサイズを合算したいときとか、ちょちょっと計算したいときがあります。

それもわざわざ計算機アプリ起動したくないし、Chromeで打ち込むとかしたくない。

それをコマンドでできないか?


そんな時にbcコマンドが便利です。

使い方は簡単で echo に計算式を出力してやってパイプでbcに流せばいいです。

$ echo "1 + 3" | bc
4

小数点はscaleで指定すればOK

$ echo "scale=5; 7 / 6" | bc
1.16666

いやーこの小数点指定をお手軽にできるのはシェルスクリプト書くときに便利なんですよ!

他にもパラメーターに -l を付ければ、sin, cos, arctan, log, exp(自然対数)、sqrtも使えます。

関数 意味
s() sin
c() cos
a() arctan
l() log
e() 自然対数のe
sqrt() 平方根

man bcで調べると色々出てきます。

$ echo "s(1)" | bc -l
.84147098480789650665

他にも変数も使えます。

$ echo "a=3 ;b=2 ;a+b" | bc
5

bcコマンドをそのまま実行すればインテラクティブモードで使えます。

$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1 + 2
3
quit

exprコマンドより使いやすい感じしますねー