工具bc:一個命令列計算器
假如你在一個圖形桌面環境中需要一個計算器時,你可能只需要一路進行點選便可以找到一個計算器。例如,Fedora 工作站中就已經包含了一個名為 Calculator 的工具。它有著幾種不同的操作模式,例如,你可以進行復雜的數學運算或者金融運算。但是,你知道嗎,命令列也提供了一個與之相似的名為 bc 的工具?
bc 工具可以為你提供的功能可以滿足你對科學計算器、金融計算器或者是簡單計算器的期望。另外,假如需要的話,它還可以從命令列中被指令碼化。這使得當你需要做複雜的數學運算時,你可以在 shell 指令碼中使用它。
因為 bc 也被用於其他的系統軟體,例如 CUPS 列印服務,所以它可能已經在你的 Fedora 系統中被安裝了。你可以使用下面這個命令來進行檢查:
- dnf list installed bc
假如因為某些原因你沒有在上面命令的輸出中看到它,你可以使用下面的這個命令來安裝它:
- sudo dnf install bc
用 bc 做一些簡單的數學運算
使用 bc 的一種方式是進入它自己的 shell。在那裡你可以按行進行許多次計算。當你鍵入 bc 後,首先出現的是有關這個程式的警告:
- $ bc
- bc 1.06.95
- Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
- This is free software with ABSOLUTELY NO WARRANTY.
- For details type `warranty`.
現在你可以按照每行一個輸入運算式或者命令了:
- 1+1
bc 會回答上面計算式的答案是:
- 2
在這裡你還可以執行其他的命令。你可以使用 加(+)、減(-)、乘(*)、除(/)、圓括號、指數符號(^) 等等。請注意 bc 同樣也遵循所有約定俗成的運算規則,例如運算的先後順序。你可以試試下面的例子:
- (4+7)*2
- 4+7*2
若要退出 bc 可以通過按鍵組合 Ctrl+D 來傳送 “輸入結束”訊號給 bc 。
使用 bc 的另一種方式是使用 echo 命令來傳遞運算式或命令。下面這個示例就是計算器中的 “Hello, world” 例子,使用 shell 的管道函式(|) 來將 echo 的輸出傳入 bc 中:
- echo `1+1` | bc
使用 shell 的管道,你可以傳送不止一個運算操作,你需要使用分號來分隔不同的運算。結果將在不同的行中返回。
- echo `1+1; 2+2` | bc
精度
在某些計算中,bc 會使用精度的概念,即小數點後面的數字位數。預設的精度是 0。除法操作總是使用精度的設定。所以,如果你沒有設定精度,有可能會帶來意想不到的答案:
- echo `3/2` | bc
- echo `scale=3; 3/2` | bc
乘法使用一個更復雜的精度選擇機制:
- echo `3*2` | bc
- echo `3*2.0` | bc
同時,加法和減法的相關運算則與之相似:
- echo `7-4.15` | bc
其他進位制系統
bc 的另一個有用的功能是可以使用除了十進位制以外的其他計數系統。例如,你可以輕鬆地做十六進位制或二進位制的數學運算。可以使用 ibase 和 obase 命令來分別設定輸入和輸出的進位制系統。需要記住的是一旦你使用了 ibase,之後你輸入的任何數字都將被認為是在新定義的進位制系統中。
要做十六進位制數到十進位制數的轉換或運算,你可以使用類似下面的命令。請注意大於 9 的十六進位制數必須是大寫的(A-F):
- echo `ibase=16; A42F` | bc
- echo `ibase=16; 5F72+C39B` | bc
若要使得結果是十六進位制數,則需要設定 obase :
- echo `obase=16; ibase=16; 5F72+C39B` | bc
下面是一個小技巧。假如你在 shell 中做這些十六進位制運算,怎樣才能使得輸入重新為十進位制數呢?答案是使用 ibase 命令,但你必須設定它為在當前進位制中與十進位制中的 10 等價的值。例如,假如 ibase 被設定為十六進位制,你需要輸入:
- ibase=A
一旦你執行了上面的命令,所有輸入的數字都將是十進位制的了,接著你便可以輸入 obase=10 來重置輸出的進位制系統。
結論
上面所提到的只是 bc 所能做到的基礎。它還允許你為某些複雜的運算和程式定義函式、變數和迴圈結構。你可以在你的系統中將這些程式儲存為文字檔案以便你在需要的時候使用。你還可以在網上找到更多的資源,它們提供了更多的例子以及額外的函式庫。快樂地計算吧!
相關文章
- bc : 一個命令列計算器命令列
- AIX下的小計算器 bcAI
- 自定義命令列計算工具:AYBO for Mac命令列Mac
- 用 nodejs 寫一個命令列工具 :建立 react 元件的命令列工具NodeJS命令列React元件
- bc 命令
- 手寫啟動一個本地伺服器的命令列工具伺服器命令列
- [20170617]vim中使用bc計算器.txt
- Linux下的計算器(bc、expr、dc、echo、awk)Linux
- 【工具分享】idomain一個命令列域名查詢工具AI命令列
- 從零開發一個node命令列工具命令列
- 如何釋出一個Python命令列工具Python命令列
- [20170616]vim中使用bc計算器.txt
- node之搭建一個http完整的靜態伺服器(命令列工具)HTTP伺服器命令列
- 在vim中使用bc進行算術計算
- 如何寫一個計算器?
- 用 Rust 打造你的第一個命令列工具Rust命令列
- 製作一個Node命令列影象識別工具命令列
- 製作一個Node命令列影像識別工具命令列
- Autotrash:一個自動清除舊垃圾的命令列工具命令列
- 開發一個Node命令列小玩具全過程--高顏統計工具命令列
- 一些命令列效率工具命令列
- 十分鐘通過 npm 建立一個命令列工具NPM命令列
- "irest" 一個 nodejs 命令列工具的製作過程RESTNodeJS命令列
- 計算兩個一維陣列的卷積陣列卷積
- 使用CREATETABLE語句宣告一個計算列(轉)
- 一個最簡單的計算器
- 另一個go命令列引數處理器 - cmdrGo命令列
- 用 PHP 寫一個命令列音樂下載器PHP命令列
- Pet:一個簡單的命令列片段管理器命令列
- 假裝很忙的三個命令列工具命令列
- Linux基礎命令---bcLinux
- 是時候擁有一個你自己的命令列工具了命令列
- ROS命令列工具ROS命令列
- 使用QT做一個簡易計算器QT
- Dry:一個命令列互動式 Docker 容器管理器命令列Docker
- 使用 Go 語言在 MacOS 建立一個自定義的命令列工具GoMac命令列
- ddgr:一個從終端搜尋 DuckDuckGo 的命令列工具Go命令列
- TortoiseSVN 命令 (命令列執行工具)命令列