こんにちは 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コマンドより使いやすい感じしますねー