<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 九寶 閱讀(1651) 評論(0)  編輯  收藏 所屬分類: Linux

    主站蜘蛛池模板: 久久精品一区二区免费看| 国产亚洲视频在线观看| A国产一区二区免费入口| 免费二级毛片免费完整视频| 亚洲综合色7777情网站777| 国产成人精品免费视| 一区二区三区在线观看免费| 成人片黄网站色大片免费| 亚洲精品无码成人片久久不卡| 91在线视频免费看| 亚洲国产成a人v在线观看| 成人免费AA片在线观看| 亚洲午夜在线播放| 日本免费人成视频播放| 另类图片亚洲校园小说区| 亚洲免费无码在线| 青柠影视在线观看免费高清| 无码乱人伦一区二区亚洲| 最近中文字幕国语免费完整 | 中文字幕亚洲日本岛国片| 男女一进一出抽搐免费视频| 亚洲妇熟XXXX妇色黄| 无码av免费一区二区三区| 亚洲一区二区三区久久| 国产高清在线精品免费软件| 免费人成视频在线观看免费| 久久亚洲国产精品一区二区| 亚洲欧洲免费视频| 中文无码亚洲精品字幕| 亚洲人成人网站在线观看| 国产99视频精品免费专区| 亚洲最大中文字幕无码网站| 一区二区三区亚洲视频| 久久久久国产精品免费网站| 亚洲成A人片在线播放器| 免费观看午夜在线欧差毛片| 91在线免费视频| 狠狠色香婷婷久久亚洲精品| 免费人成在线观看网站视频| 91人成网站色www免费下载| 亚洲人片在线观看天堂无码|