新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > linux shell 腳本入門

        linux shell 腳本入門

        作者: 時間:2007-04-24 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/258223.htm

        第2部分 實例
        現在我們來討論編寫一個腳本的一般步驟。任何優秀的腳本都應該具有幫助和輸入參數。并且寫一個偽腳本(framework.sh),該腳本包含了大多數腳本都需要的框架結構,是一個非常不錯的主意。這時候,在寫一個新的腳本時我們只需要執行一下copy命令:
        cp framework.sh myscript
        然后再插入自己的函數。
        讓我們再看兩個例子:
        二進制到十進制的轉換
        腳本 b2d 將二進制數 (比如 1101) 轉換為相應的十進制數。這也是一個用expr命令進行數學運算的例子:
        #!/bin/sh
        # vim: set sw=4 ts=4 et:
        help()
        {
        cat
        b2h -- convert binary to decimal
        USAGE: b2h [-h] binarynum
        OPTIONS: -h help text
        EXAMPLE: b2h 111010
        will return 58
        HELP
        exit 0
        }
        error()
        {
        # print an error and exit
        echo $1
        exit 1
        }
        lastchar()
        {
        # return the last character of a string in $rval
        if [ -z $1 ]; then
        # empty string
        rval=
        return
        fi
        # wc puts some space behind the output this is why we need sed:
        numofchar=`echo -n $1 | wc -c | sed s/ //g `
        # now cut out the last char
        rval=`echo -n $1 | cut -b $numofchar`
        }

        chop()
        {
        # remove the last character in string and return it in $rval
        if [ -z $1 ]; then
        # empty string
        rval=
        return
        fi
        # wc puts some space behind the output this is why we need sed:
        numofchar=`echo -n $1 | wc -c | sed s/ //g `
        if [ $numofchar = 1 ]; then
        # only one char in string
        rval=
        return
        fi
        numofcharminus1=`expr $numofchar - 1`
        # now cut all but the last char:
        rval=`echo -n $1 | cut -b 0-${numofcharminus1}`
        }
        while [ -n $1 ]; do
        case $1 in
        -h) help;shift 1;; # function help is called
        --) shift;break;; # end of options
        -*) error error: no such option $1. -h for help;;
        *) break;;
        esac
        done
        # The main program
        sum=0
        weight=1
        # one arg must be given:
        [ -z $1 ] help
        binnum=$1
        binnumorig=$1

        while [ -n $binnum ]; do
        lastchar $binnum
        if [ $rval = 1 ]; then
        sum=`expr $weight + $sum`
        fi
        # remove the last position in $binnum
        chop $binnum
        binnum=$rval
        weight=`expr $weight * 2`
        done
        echo binary $binnumorig is decimal $sum


        該腳本使用的算法是利用十進制和二進制數權值 (1,2,4,8,16,..),比如二進制10可
        以這樣轉換成十進制:
        0 * 1 + 1 * 2 = 2


        為了得到單個的二進制數我們是用了lastchar 函數。該函數使用wc –c計算字符個數,
        然后使用cut命令取出末尾一個字符。Chop函數的功能則是移除最后一個字符。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新竹市| 桑日县| 兴和县| 卫辉市| 宜丰县| 金昌市| 嘉荫县| 洱源县| 罗源县| 陆川县| 盐边县| 天峻县| 安新县| 阿城市| 绥滨县| 大同县| 宣城市| 泰安市| 婺源县| 泰州市| 翼城县| 旬阳县| 高雄县| 扶绥县| 兰西县| 和硕县| 普宁市| 胶州市| 峨边| 沾益县| 五常市| 佛冈县| 沽源县| 尖扎县| 新蔡县| 遂宁市| 台南县| 大名县| 即墨市| 绍兴市| 江阴市|