<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    常用鏈接

    統計

    最新評論

    Shell 運算和進制轉換(轉)

    Shell 運算和進制轉換

    Shell 提供大量的基本運算操作,在腳本中非常有用。Shell 對您提供的算術表達式求值,執行運算展開式,此時使用得出的結果替換表達式。以下面的格式提供運算表達式:

    $(( expression ))
                            

    您可以使用 echo 在命令行顯示運算展開式的結果,了解其工作情況。現在嘗試清單 5 所顯示的結果。


    清單 5. Bourne Shell 中的運算展開式
                         
                            $ echo $((10+40))
                            50
                            $ echo $((5*(3+3)))
                            30
                            

    您還可以將展開式分配給變量。嘗試清單 6 所顯示的結果。


    清單 6. 將運算展開式分配給 Shell 變量
                         
                            $ myvar = 10
                            $ echo $myvar
                            10
                            $ echo $(($myvar-2))
                            8
                            $ myvar = $(($myvar+5))
                            $ echo $myvar
                            15
                            $ result = $(($myvar-10))
                            $ echo $result
                            5
                            $
                            

    表 2 列出了在大多數 Bourne 以及與 Bourne 兼容的 Shell中可以使用的運算符。正如上面第二個示例,使用圓括號括起來的語句有更高的優先級。實際上,Shell 算術優先級通常根據 C 語言的規則來確定。


    表 2. Shell 條件表達式
    運算符 描述
    +
    -
    *
    /
    % 求余
    < 小于(1 代表真,0 代表假)
    <= 小于等于(1 代表真,0 代表假)
    > 大于(1 代表真,0 代表假)
    >= 大于等于(1 代表真,0 代表假)
    << 按位向左移位:將給定的整數或第一個表達式向左移動第二個表達式表示的位數
    >> 按位向右移位:將給定的整數或第一個表達式向右移動第二個表達式表示的位數




    回頁首


    使用 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 安裝程序都提供。因為它允許您指定輸出進制,所以當您需要以十進制以外的進制輸出時,這是一種很好的技術。

    bc 的特殊變量 ibaseobase 分別包含用于輸入和輸出的進制的值。缺省情況下,都被設置為 10。要執行進制轉換,需要改變其中的一個或兩個值,然后提供一個數字。立即嘗試,如清單 8 中所示。


    清單 8. 使用 bc 執行進制轉換
                         
                            $ bc -ql
                                                10
                            10
                            obase=16
                                                10
                            A
                            ibase=2
                                                10
                            2
                            
                                                     Control-D
                                                
                            $
                            

    要快速執行進制轉換,可以聯合使用 bcecho形成快捷的單命令行程序,將給定的值通過管道傳輸給 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
                            $
                            

    posted on 2008-07-09 14:46 九寶 閱讀(1652) 評論(0)  編輯  收藏 所屬分類: Linux

    主站蜘蛛池模板: 国产精品久久久久久亚洲小说 | 成人精品视频99在线观看免费| 大陆一级毛片免费视频观看| 亚洲AV一二三区成人影片| 国产2021精品视频免费播放| 亚洲avav天堂av在线不卡| 久久狠狠躁免费观看2020| 亚洲欧洲一区二区| 一级毛片在线免费观看| 久久亚洲国产成人精品性色 | 2021在线永久免费视频| 亚洲激情视频在线观看| 91久久精品国产免费一区| 亚洲无砖砖区免费| 日本精品人妻无码免费大全| 亚洲精品无码高潮喷水A片软| 四虎永久在线精品免费影视 | 亚洲天堂中文字幕| 国产成人精品免费视频动漫| 亚洲中文无码线在线观看| 免费看片在线观看| 久久精品国产亚洲av瑜伽| 亚洲午夜爱爱香蕉片| 你好老叔电影观看免费| 婷婷久久久亚洲欧洲日产国码AV| 久久黄色免费网站| 一本色道久久88亚洲精品综合| 国产精品极品美女免费观看| 一级毛片人与动免费观看| 久久综合日韩亚洲精品色| 成人网站免费观看| 日韩毛片在线免费观看| 亚洲国产精品成人久久 | 日本一道一区二区免费看| 九九久久精品国产免费看小说 | 亚洲AV日韩AV天堂久久| 国产成人免费爽爽爽视频| caoporm超免费公开视频| 亚洲六月丁香六月婷婷色伊人| 国产网站免费观看| 四虎影视在线影院在线观看免费视频|