本篇介紹如何在 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
預設不會輸出小數點以下的數字:
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
使用 bc
的 for
迴圈計算 1 到 10 的總和:
/* bc 指令稿 計算 1 到 10 的總和*/ sum = 0 for (i = 1; i <= 10; i++) { sum += i } print "答案是:", sum, "n"
答案是:55
參考資料:Tecmint、lifewire、basically tech、tutorialspoint