使用Shell進行進制轉換
假定在您的腳本中有一些數字,您需要以另外的進制處理這些數字。使用 Shell 運算可以很容易地自動實現這類轉換。一種情況是使用 Shell 運算把一個數字從給定的進制轉換位十進制。如果數字以運算展開式的形式提供,那麼假定它帶有十進制符號,除非 它前面帶有 0(這種情況假定是八進制)或 0x(這種情況假定是十六進制)。鍵入以下內容以得到一些八進制和十六進制值的十進制輸出:
$ echo $((013))
$ echo $((0xA4))
您還可以使用以下格式指定 2 到 64 之間的任意進制:
$((BASE#NUMBER))
通過在 Shell 提示符後鍵入清單 7 中所示的行,嘗試將二進制、八進制、十六進制以及其他進制的數轉換為十進制。
清單 7. 在 Shell 中將任意進制的數以十進制輸出
echo $((2#1101010))
echo $((8#377))
echo $((16#D8))
echo $((12#10))
echo $((36#ZZYY))
使用 bc 進行進制轉換
在 Shell 中進行進制轉換的另一個訣竅是使用 bc,它是一種任意精度運算語言,大多數 UNIX/Linux 安裝程序都提供。因為它允許您指定輸出進制,所以當您需要以十進制以外的進制輸出時,這是一種很好的技術。
bc 的特殊變量 ibase 和 obase 分別包含用於輸入和輸出的進制的值。缺省情況下,都被設置為 10。要執行進制轉換,需要改變其中的一個或兩個值,然後提供一個數字。立即嘗試,如清單 8 中所示。
清單 8. 使用 bc 執行進制轉換
$ bc -ql
10
10
obase=16
10
A
ibase=2
10
2
要快速執行進制轉換,可以聯合使用 bc 和 echo形成快捷的單命令行程序,將給定的值通過管道傳輸給 bc。鍵入清單 9 中顯示的內容。
清單 9. Shell 單命令行 bc 程序
$ echo 'obase=16; 47' | bc
2F
$ echo 'obase=10; ibase=16; A03' | bc
2563
警告:當您設置 bc 的輸入進制以後,輸入 bc 的所有數字都使用該進制,包括您提供用於設置輸出進制的數字。因此最好先設置輸出進制,否則可能會產生意想不到的結果,如清單 10 中所示。
清單 10. 設置輸入和輸出進制的先後順序的重要性
$ echo 'ibase=16; obase=10; A' | bc
A
$ echo 'ibase=16; obase=A; A' | bc
10