bcコマンドでコマンドラインから計算する方法|小数計算やシェルスクリプト連携もコマンド

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドA-E, テキスト処理コマンド > bcコマンドでコマンドラインから計算する方法|小数計算やシェルスクリプト連携もコマンド
「シェルスクリプトで小数の計算をしたいけど、$(( )) では整数しか扱えない」
「コマンドラインで関数電卓のように三角関数や対数を計算したい」

シェルの算術展開 $(( )) は整数演算しかできないため、小数を含む計算を行うと結果が丸められてしまいます。こうした場面で頼りになるのが、任意精度計算ができる bcコマンド です。

この記事では、bc コマンドの基本的な使い方から、小数点以下の桁数指定、数学関数の利用、シェルスクリプトからの呼び出しまで、実務で使える手順を解説します。
【この記事でわかること】
・bc はコマンドライン上で小数計算や関数計算ができる電卓コマンド
・-l オプションで三角関数・対数・指数などの数学関数が使える
・シェルスクリプトから `echo | bc` で呼び出せば、浮動小数点計算もできる

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

bcコマンドとは?(basic calculatorの略)

bc は「basic calculator」の略で、コマンドライン上で任意精度の計算ができる電卓コマンドです。整数だけでなく小数も扱え、-l オプションを付けると三角関数や対数などの数学関数も使えます。

シェルの $(( ))expr が整数しか扱えないのに対し、bc は小数点以下を指定した桁数まで正確に計算できるのが大きな特徴です。

基本的な使い方

1. 対話モードで起動する

引数なしで実行すると対話モードに入り、式を入力するたびに結果が返ってきます。終了は quit です。

# 対話モードで起動 $ bc bc 1.07.1 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc. 1+2+3+4 10 10*5 50 quit

2. echoとパイプでワンライナー計算する

実務で最もよく使うのは、echo で式を渡す形です。スクリプトの中にそのまま書けます。

# ワンライナーで計算 $ echo "1+2+3+4" | bc 10 # 掛け算 $ echo "12*34" | bc 408

3. 小数計算の桁数を指定する(scale)

デフォルトでは割り算の結果も整数で切り捨てられます。小数点以下の桁数は scale 変数で指定します。

# デフォルトでは小数点以下が切り捨てられる $ echo "10/3" | bc 3 # scale=4 で小数点以下4桁まで計算 $ echo "scale=4; 10/3" | bc 3.3333

scale は文字どおり「小数点以下の桁数」を指定する変数です。割り算を含む計算では必ず指定しましょう。

4. -lで数学関数を使う

-l(library)オプションを付けると、三角関数・対数・指数などの数学関数が使えるようになります。

# 正弦(sin)・余弦(cos)・平方根 $ echo "s(1.5)" | bc -l .99749498660405443094 $ echo "c(0)" | bc -l 1.00000000000000000000 $ echo "sqrt(2)" | bc -l 1.41421356237309504880

-l を付けるとデフォルトの scale が自動的に20になるため、桁数指定なしでも小数計算ができます。

応用・実務Tips

シェルスクリプトでの変数計算

シェル変数を bc に渡して計算結果を受け取るパターンは、スクリプトの定番です。

#!/bin/bash total=1234 count=56 avg=$(echo "scale=2; $total / $count" | bc) echo "平均: $avg"

$( ) でコマンド置換し、結果を変数に受け取ります。

演算子と関数の一覧

+ - * /:四則演算
%:剰余(scale=0時のみ正確)
^:累乗
sqrt(x):平方根
s(x) / c(x):正弦・余弦(-l必須)
l(x) / e(x):自然対数・指数(-l必須)
a(x):逆正接(-l必須)

トラブルシュート・エラー対処

「小数点以下が切り捨てられてしまう」場合

bc はデフォルトの scale が0なので、割り算の結果が整数になります。scale=桁数; を先頭に付けるか、-l オプションを併用してください。

「bc: command not found」エラー

最小構成のLinuxディストリビューションでは bc が入っていないことがあります。インストールコマンドは次のとおりです。

# RHEL系 $ sudo dnf install bc # Debian/Ubuntu系 $ sudo apt install bc

本記事のまとめ

やりたいこと コマンド
対話モードで起動する bc
ワンライナーで計算する echo "1+2*3" | bc
小数計算の桁数を指定する echo "scale=4; 10/3" | bc
三角関数・対数を使う echo "s(1.5)" | bc -l
シェル変数の計算結果を受け取る avg=$(echo "scale=2; $total/$count" | bc)
bcをインストールする sudo dnf install bc

シェルスクリプトで正確な計算を扱いたい方へ

bc を使えば、シェルだけでは難しい小数計算や科学計算も手軽にこなせます。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。