本篇介紹如何在 Linux 中使用 bc 指令處理各種數學運算,以及應用在指令稿中的範例。

Linux 的 bc 指令是一個標準的 Linux 計算工具,同時也是一種簡單的程式語言,基本的變數、if 控制、迴圈等都有,可以用來處理各種的數學運算、作為辦公用的計算機,或是用它所提供的語法來撰寫指令稿,處理較複雜的問題。


由於 bc 是一個標準的 Linux 指令,通常在各種 Linux 中都有安裝,所以 Linux 老手在撰寫 Bash 等 shell 指令稿時,若遇到各種需要數學運算的工作,有都會交給 bc 來處理。

以下我們將介紹 bc 的使用方式,以及應用在 Bash 指令稿中的範例。

安裝 bc 指令

一般來說,大部分的 Linux 發行版預設都會安裝 bc,如果您的 Linux 系統上真的沒有裝,可以透過各個 Linux 發行版的套件庫來安裝:

sudo apt install bc    # Debian/Ubuntu
sudo yum install bc    # RHEL/CentOS
sudo dnf install bc    # Fedora 22+

bc 互動式操作環境

若要把 bc 當作一般的計算機使用,可以在終端機中執行 bc 指令,進入互動是的操作介面:

# shell 指令
bc

接著即可輸入各種的數學運算式,每輸入一行運算式,按下 Enter 之後,bc 就會顯示運算的結果,例如:

5 + 10
15

計算 2 的 20 次方:

2 ^ 20
1048576

也可以使用括號指定運算的順序:

(3 + 6) * 9
81

bc 互動式操作環境

設定小數點後輸出位數

bc 預設不會輸出小數點以下的數字:

3 / 5
0

如果想要得到比較精確的數值,可以在執行 bc 的時候,加上 -l 參數,這樣它就會輸出輸出小數點以下 20 未數字:

# shell 指令
bc -l

這樣就可以得到很精確的結果:

3 / 5
.60000000000000000000
100 / 7
14.28571428571428571428

除了 -l 參數之外,亦可使用 scale 這個 bc 的變數來指定小數點後輸出位數:

scale=5
100/7
14.28571
scale=10
100/7
14.2857142857

bc 與 Shell 指令稿

通常 bc 都會寫在 shell 指令稿中,結合其他的 Linux 指令一起使用,我們可以用其他指令產生運算式,交給 bc 去計算:

# shell 指令
echo 'scale=5; 100/7' | bc
14.28571

在 shell 指令稿中,若要將 bc 的計算結果放進 shell 的變數中,可以這樣寫:

#/bin/bash
ans=$(echo 'scale=5; 100/7' | bc)
echo "答案為:$ans"
答案為:14.28571

變數

bc 也可以像一般程式語言一樣使用變數:

a = 123
b = 456
a * b
56088

我們可以結合 shell 底下 $1$2 參數,轉寫一個計算平均值的 shell 指令稿:

#/bin/bash
# 計算兩個數的平均值
ans=$(echo "($1 + $2) / 2" | bc -l)
echo "平均為:$ans"

把這段指令儲存為 script.sh,執行時將要計算的輸入數值放在後面:

./script.sh 12 34
平均為:23.00000000000000000000

補充範例

bc 還有其他非常多的功能,但是一般人大概比較少會使用到,以下我們只提供一些範例給大家參考,若有興趣更深入研究的人,可以參考範例以及 bc 的線上手冊(man page)。

計算數學常數 PI 的值:

#/bin/bash
pi=$(echo "scale=10; 4*a(1)" | bc -l)
echo "PI 為:$pi"
PI 為:3.1415926532

bc 指令稿中自訂函數:

/* bc 指令稿 */
define myfunc (x) {
  ans = x * 2;
  return (ans);
}
myfunc(5);
10

使用 bcfor 迴圈計算 1 到 10 的總和:

/* bc 指令稿 
   計算 1 到 10 的總和*/
sum = 0
for (i = 1; i <= 10; i++) {
  sum += i
}
print "答案是:", sum, "\n"
答案是:55

參考資料:Tecmintlifewirebasically techtutorialspoint