• <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腳本語言學習手冊指南(3)

    發表于:2012-09-27來源:cu作者:cloudtimes點擊數: 標簽:linux腳本語言shell
    for-loop表達式查看一個字符串列表 (字符串用空格分隔) 然后將其賦給一個變量: for var in ....; do .... done 在下面的例子中,將分別打印ABC到屏幕上: #!/bin

      for-loop表達式查看一個字符串列表 (字符串用空格分隔) 然后將其賦給一個變量:

      for var in ....; do

      ....

      done

      在下面的例子中,將分別打印ABC到屏幕上:

      #!/bin/sh

      for var in A B C ; do

      echo "var is $var"

      done

      下面是一個更為有用的腳本showrpm,其功能是打印一些RPM包的統計信息:

      #!/bin/sh

      # list a content summary of a number of RPM packages

      # USAGE: showrpm rpmfile1 rpmfile2 ...

      # EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm

      for rpmpackage in $*; do

      if [ -r "$rpmpackage" ];then

      echo "=============== $rpmpackage =============="

      rpm -qi -p $rpmpackage

      else

      echo "ERROR: cannot read file $rpmpackage"

      fi

      done

      這里出現了第二個特殊的變量$*,該變量包含了所有輸入的命令行參數值。

      如果您運行showrpm openssh.rpm w3m.rpm webgrep.rpm

      此時 $* 包含了 3 個字符串,即openssh.rpm, w3m.rpm and webgrep.rpm.

      5. 引號

      在向程序傳遞任何參數之前,程序會擴展通配符和變量。這里所謂擴展的意思是程序會把通配符

      (比如*)替換成合適的文件名,它變量替換成變量值。為了防 止程序作這種替換,您可以使用

      引號:讓我們來看一個例子,假設在當前目錄下有一些文件,兩個jpg文件, mail.jpg 和tux.jpg。

      1.2 編譯SHELL腳本

      #ch#!/bin/sh mod +x filename

      cho *.jpg ∪緩螅 梢醞ü 淙耄?./filename 來執行您的腳本。

      這將打印出"mail.jpg tux.jpg"的結果。

      引號 (單引號和雙引號) 將防止這種通配符擴展:

      #!/bin/sh

      echo "*.jpg"

      echo '*.jpg'

      這將打印"*.jpg" 兩次。

      單引號更嚴格一些。它可以防止任何變量擴展。雙引號可以防止通配符擴展但允許變量擴展。

      #!/bin/sh

      echo $SHELL

      echo "$SHELL"

      echo '$SHELL'

      運行結果為:

      /bin/bash

      /bin/bash

      $SHELL

      最后,還有一種防止這種擴展的方法,那就是使用轉義字符——反斜桿:

      echo *.jpg

      echo $SHELL

      這將輸出:

      *.jpg

      $SHELL

      6. Here documents

      當要將幾行文字傳遞給一個命令時,here documents(譯者注:目前還沒有見到過對該詞適合的翻譯)

      一種不錯的方法。對每個腳本寫一段幫助性的文字是很有用的,此時如果我們四有那個 here documents

      就不必用echo函數一行行輸出。 一個 "Here document" 以 shift by 2

      --) shift;break;; # end of options

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

      *) break;;

      esac

      done

      echo "opt_f is $opt_f"

      echo "opt_l is $opt_l"

      echo "first arg is $1"

      echo "2nd arg is $2"

      您可以這樣運行該腳本:

      cmdparser -l hello -f -- -somefile1 somefile2

      返回的結果是:

      opt_f is 1

      opt_l is hello

      first arg is -somefile1

      2nd arg is somefile2

      這個腳本是如何工作的呢?腳本首先在所有輸入命令行參數中進行循環,將輸入參數

      與case表達式進行比較,如果匹配則設置一個變量并且移除該參數。根據unix系統的慣例,

      首先輸入的應該是包含減號的參數.

      第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' `

    原文轉自: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>