<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          linux shell 腳本入門

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

          本文引用地址:http://www.ex-cimer.com/article/258223.htm

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


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



          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();