新聞中心

        linux shell 腳本入門(mén)

        作者: 時(shí)間:2007-04-24 來(lái)源:網(wǎng)絡(luò) 收藏

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

        第2部分 實(shí)例
        現(xiàn)在我們來(lái)討論編寫(xiě)一個(gè)腳本的一般步驟。任何優(yōu)秀的腳本都應(yīng)該具有幫助和輸入?yún)?shù)。并且寫(xiě)一個(gè)偽腳本(framework.sh),該腳本包含了大多數(shù)腳本都需要的框架結(jié)構(gòu),是一個(gè)非常不錯(cuò)的主意。這時(shí)候,在寫(xiě)一個(gè)新的腳本時(shí)我們只需要執(zhí)行一下copy命令:
        cp framework.sh myscript
        然后再插入自己的函數(shù)。
        讓我們?cè)倏磧蓚€(gè)例子:
        二進(jìn)制到十進(jìn)制的轉(zhuǎn)換
        腳本 b2d 將二進(jìn)制數(shù) (比如 1101) 轉(zhuǎn)換為相應(yīng)的十進(jìn)制數(shù)。這也是一個(gè)用expr命令進(jìn)行數(shù)學(xué)運(yùn)算的例子:
        #!/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


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


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



        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 五莲县| 巴中市| 安吉县| 溧水县| 林芝县| 榆中县| 德钦县| 灵丘县| 宁城县| 石林| 马公市| 佛冈县| 宜城市| 郎溪县| 宁武县| 依兰县| 镇宁| 象山县| 平泉县| 望谟县| 五大连池市| 翁源县| 乌审旗| 巢湖市| 天水市| 云霄县| 华宁县| 略阳县| 藁城市| 奉贤区| 蕲春县| 蒙自县| 天全县| 祁连县| 特克斯县| 巴林左旗| 九台市| 离岛区| 确山县| 宜丰县| 荃湾区|