bashで計算するなら、整数は$(( ))、小数点が必要なときはbcコマンドを使います。本記事では、bash 計算の基本から、bcコマンドの四則演算・scaleの設定・数学関数(-lオプション)までを、初心者向けに実行例つきで説明します。
管理人本記事の読者層は以下の方を想定しています。
- Linux環境での基本的な操作や四則演算の方法を学びたい初心者層
- ターミナルで効率的に計算を行いたいシステム管理者や開発者
- Linuxのコマンドラインを活用して、数学的な計算を手軽に行いたい技術系の学生や研究者
bash 計算の基本:整数は$(( ))、小数点はbcコマンドで計算する
bashで計算するときは、整数であれば算術展開の$(( ))を使います。bashの算術は固定幅の整数で行われるため(GNU Bashリファレンスマニュアルより)、$((3.5 + 1))のように小数を書くと、構文エラーになります。小数点を含む計算は、次の章で説明するbcコマンドを使います。
演算子と優先順位は、C言語と同じです。よく使う演算子は次のとおりです。
| 演算子 | 意味 | 書き方の例 | 結果 |
|---|---|---|---|
+ | 足し算 | echo $((5 + 3)) | 8 |
- | 引き算 | echo $((5 - 3)) | 2 |
* | 掛け算 | echo $((5 * 3)) | 15 |
/ | 割り算(小数点以下は切り捨て) | echo $((7 / 2)) | 3 |
% | 余り | echo $((5 % 3)) | 2 |
** | 累乗 | echo $((5 ** 3)) | 125 |
bash 計算を変数で行う
$(( ))の中では、変数名を$なしで書けます。計算結果を変数に入れるには、$(( ))の結果を代入します。
a=5
b=3
sum=$((a + b))
echo "$sum"実行すると、8が表示されます。
bash 計算で小数点を扱う
$(( ))は整数だけなので、割り算の小数点以下は切り捨てられます。小数点まで求めたいときは、bcコマンドへ式を渡します。
echo $((7 / 2))
echo "scale=2; 7/2" | bc1行目は3、2行目は3.50が表示されます。scale=2は、小数点以下を2桁まで表示する指定です。詳しくは、後の章で説明します。
bash 計算の結果を数値比較する(if文)
整数の大小を比べるときは、(( ))か、[ ]と-gtなどの比較演算子を使います。
a=5
b=3
if (( a > b )); then
echo "aのほうが大きい"
fi
if [ "$a" -gt "$b" ]; then
echo "aのほうが大きい"
fibash 計算で足し算をループで繰り返す
for文と$(( ))を組み合わせると、1から5までの合計を求められます。
sum=0
for i in 1 2 3 4 5; do
sum=$((sum + i))
done
echo "$sum"実行すると、15が表示されます。
Linuxコマンドで簡単な四則計算を行う方法
ここからは、小数を含む計算に使うbcコマンドを詳しく見ていきます。bcコマンドは、ターミナルで直接計算結果を表示してくれる便利なツールです。
以下のようにbcコマンドを起動し、数式を入力することで即座に計算結果が得られます。
$ bc終了方法は「quit」コマンドを入力するだけ。
bcコマンドでの小数計算と「scale」設定
割り算を行う際に、小数点以下が表示されない場合があります。その際には、変数scaleを設定することで小数点以下の桁数を指定できます。scaleの初期値は0です。例えば、4桁まで表示したい場合は以下のように設定します。
$ bc
1+1
2
100/3
33
scale=4
100/3
33.3333割り算の場合は、scaleが0のままだと小数点以下が表示されません。scale=4と入力すると小数点以下4桁まで表示され、同じbcを起動している間は、scaleを変更しないかぎり4桁のままです。bcを終了して起動し直すと、scaleは0に戻ります。
$ echo "scale=4; 4*(2+3)/2"|bc
10.0000
$ echo "scale=4; 4^2"|bc
16
$ echo "scale=4; sqrt(4)"|bc
2.0000echoで式を文字列として出力し、パイプでbcコマンドへ渡すと、1行で計算できます。括弧、四則計算、累乗(^)、平方根(sqrt)なども使えるため、とても便利です。
四則演算以外の計算にも対応するbcコマンド
bcコマンドは、単純な四則演算だけでなく、累乗や平方根の計算など、より高度な数式にも対応しています。平方根は、-lオプションなしでも使えます。以下は具体例です。
echo "scale=4; sqrt(4)"|bc平方根の計算結果として、2.0000が表示されます。このように、bcコマンドを利用すれば、プログラム的なアプローチで複雑な数式を処理することができます。
bcコマンドの数学関数の活用法
-lオプションを付けると、数学ライブラリが読み込まれ、scaleの初期値が20になります(GNU bcの公式マニュアルより)。これにより、自然対数や三角関数などの数学関数が使えます。
例えば、s(0.5)と入力すると、その値がsin(0.5ラジアン)として計算されます。
#!/usr/bin/bc -l
s(0.5)
c(0.5)
a(0.5)上のファイルをcalc.bcという名前で保存し、bc -l calc.bcで実行できます。ファイルの内容を実行し終えたあと、bcは入力待ちになるため、quitと入力して終了します。
bc 1.07.1で実行すると、次のように表示されます。scaleが20のため小数点以下は20桁で、先頭の0は省略されます。
.47942553860420300027
.87758256189037271611
.46364760900080611621それぞれの関数は以下の用途で使用できます。
| 記号 | 説明 |
|---|---|
| s (x) | sin (x の単位はラジアン) |
| c (x) | cos (x の単位はラジアン) |
| a (x) | atan (返り値の単位はラジアン) |
| l (x) | log (自然対数) |
| e (x) | exp (指数関数) |
| j (n,x) | 整数 n 次のベッセル関数 |
複雑な数式の処理とコマンドライン計算
Linux環境では、bcコマンドとパイプを組み合わせることで、コマンドラインで複雑な計算を簡単に実行できます。括弧を使った数式の処理や、複数の演算を組み合わせた計算も可能です。
echo "scale=4; 4^2"|bc
16bashの変数に入れた小数は、echoの文字列に埋め込んでbcへ渡せます。計算結果を変数に入れるときは、$( )で囲みます。
a=1.5
b=2.5
echo "scale=1; $a + $b" | bc
x=$(echo "scale=2; 10/3" | bc)
echo "$x"1つ目の計算は4.0、変数xの中身は3.33になります。このように、bashのスクリプトの中でbcを呼び出せば、小数を含む計算もスクリプトに組み込めます。
まとめ
bashで計算するときの3つのポイント
- 整数は$(( ))、小数点はbc:bashの算術展開$(( ))は整数だけを扱うため、小数点が必要な計算はbcコマンドを使う。
- scaleと-lオプション:scaleで小数点以下の桁数を指定でき、
-lオプションを使うと、自然対数や三角関数などの数学関数も使える。 - スクリプトへの組み込み:
$( )でbcの結果を変数に入れれば、小数を含む計算もスクリプトに組み込める。
次回の記事をご期待ください。どうぞよろしくお願いいたします。
関連リンク









コメント