bash 計算のやり方は?四則演算の書き方とbcコマンドで小数点を扱う方法

📖 この記事は約 8 分で読めます。
概要

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" | bc

1行目は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のほうが大きい"
fi

bash 計算で足し算をループで繰り返す

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.0000

echoで式を文字列として出力し、パイプで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
16

bashの変数に入れた小数は、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の結果を変数に入れれば、小数を含む計算もスクリプトに組み込める。

次回の記事をご期待ください。どうぞよろしくお願いいたします。

関連リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次