• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Linux系統下shell腳本語言學習手冊指南(4)

    發表于:2012-09-27來源:cu作者:cloudtimes點擊數: 標簽:linux腳本語言shell
    # 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 so

      # 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函數的功能則是移除最后一個字符。

      文件循環程序

      或許您是想將所有發出的郵件保存到一個文件中的人們中的一員,但是在過了幾個月

      以后,這個文件可能會變得很大以至于使對該文件的訪問速度變慢。下面的 腳本rotatefile

      可以解決這個問題。這個腳本可以重命名郵件保存文件(假設為outmail)為outmail.1,

      而對于outmail.1就變成了outmail.2 等等等等...

      #!/bin/sh

      # vim: set sw=4 ts=4 et:

      ver="0.1"

      help()

      {

      cat <

      rotatefile -- rotate the file name

      USAGE: rotatefile [-h] filename

      OPTIONS: -h help text

      EXAMPLE: rotatefile out

      This will e.g rename out.2 to out.3, out.1 to out.2, out to out.1

      and create an empty out-file

      The max number is 10

      version $ver

      HELP

      exit 0

      }

      error()

      {

      echo "$1"

      exit 1

      }

      while [ -n "$1" ]; do

      case $1 in

      -h) help;shift 1;;

      --) break;;

      -*) echo "error: no such option $1. -h for help";exit 1;;

      *) break;;

      esac

      done

      # input check:

      if [ -z "$1" ] ; then

      error "ERROR: you must specify a file, use -h for help"

      fi

      filen="$1"

      # rename any .1 , .2 etc file:

      for n in 9 8 7 6 5 4 3 2 1; do

      if [ -f "$filen.$n" ]; then

      p=`expr $n + 1`

      echo "mv $filen.$n $filen.$p"

      mv $filen.$n $filen.$p

      fi

      done

      # rename the original file:

      if [ -f "$filen" ]; then

      echo "mv $filen $filen.1"

      mv $filen $filen.1

      fi

      echo touch $filen

      touch $filen

      這個腳本是如何工作的呢?在檢測用戶提供了一個文件名以后,我們進行一個9到1的循環。文件9被命名為10,文件8重命名為9等等。循環完成之后,我們將原始文件命名為文件1同時建立一個與原始文件同名的空文件。

      調試

      最簡單的調試命令當然是使用echo命令。您可以使用echo在任何懷疑出錯的地方打印任何變量值。這也是絕大多數的shell程序員要花費80%的時間來調試程序的原因。Shell程序的好處在于不需要重新編譯,插入一個echo命令也不需要多少時間。

      shell也有一個真實的調試模式。如果在腳本"strangescript" 中有錯誤,您可以這樣來進行調試:

      sh -x strangescript

      這將執行該腳本并顯示所有變量的值。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>