• <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編程入門

    發布: 2007-5-26 11:30 | 作者: 佚名 | 來源: cciss | 查看: 32次 | 進入軟件測試論壇討論

    領測軟件測試網 通常情況下,我們從命令行輸入命令每輸入一次就能夠得到系統的一次響應。一旦需要我們一個接著一個的輸入命令而最后才得到結果的時候,這樣的做法顯然就沒有效率。要達到這樣的目的,通常我們利用shell程序或者shell腳本來實現。

      一、簡介

      Shell編程有很多類似C語言和其他程序語言的特征,但是又沒有編程語言那樣復雜。Shell程序就是放在一個文件中的一系列Linux命令和實用程序,在執行的時候,通過Linux一個接著一個地解釋和執行每個命令。

      下面我們來看一個簡單的shell程序:

      1、首先建立一個內容如下的文件,名字為date,將其存放在目錄下的bin子目錄中。

      #Program date

      #usageto ::show the date in this way (注釋)

      echo “Mr.$USER,Today is:”

      echo date “+%B%d%A”

      echo “Whish you a lucky day !”

      2、編輯完該文件之后它還不能執行,我們需要給它設置可執行權限。使用如下命令:

      chmod +x date

      通過以上過程之后,我們就可以像使用ls命令一樣執行這個shell程序.

      [beichen@localhost bin]$ date

      Mr.beichen,Today is:

      January 13 Friday

      Whish you a lucky day !

      為了在任何目錄里都可以執行這個程序,可以將bin的這個目錄添加到路徑中去。

      [beichen@localhost bin]$ PATH=$PATH:$HOME/bin

      (注:這里的$HOME代替的是/home/beichen,而bin目錄是自己建的一個目錄)

      另外一種執行date的方法就是把它作為一個參數傳給shell命令:

      [beichen@localhost /]$ bash date

      Mr.beichen,Today is:

      January 13 Friday

      Whish you a lucky day !

      盡管在前面我們使用chmod +x date將date設置為可執行,其實不設置也沒有關系,但在Linux里執行它,需要先告訴系統它是一個可執行的腳本。

      [beichen@localhost /]$ .date

      Mr.beichen,Today is:

      January 13 Friday

      Whish you a lucky day !

      即在date前面加上一個點”.”,并且用空格與后面的shell腳本的文件名隔開。當然,不推薦這樣做。

      二、shell參數

      如同ls 命令可以接受目錄等作為它的參數一樣,在shell編程時同樣可以使用參數。Shell有位置參數和內部參數。

      1、 位置參數

      由系統提供的參數稱為位置參數。位置參數的值可以用$N得到,N是一個數字,如果為1,即$1.類似C語言中的數組,Linux會把輸入的命令字符串分段并給每段進行標號,標號從0開始。第0號為程序名字,從1開始就表示傳遞給程序的參數。如$0表示程序的名字,$1表示傳遞給程序的第一個參數,以此類推。

      2、 內部參數

      上述過程中的$0是一個內部變量,它是必須的,而$1則可有可無。和$0一樣的內部變量還有以下幾個。

      $# ----傳遞給程序的總的參數數目

      $? ----上一個代碼或者shell程序在shell中退出的情況,如果正常退出則返回0,反之為非0值。

      $* ----傳遞給程序的所有參數組成的字符串。

      下面舉例進行說明:

      建立一個內容為如下的程序P1:

      echo “Program name is $0”

      echo “There are totally $# parameters passed to this program”

      echo “The last is $?”

      echo “The parameters are $*”

      執行后的結果如下:

      [beichen@localhost bin]$ P1 this is a test program //傳遞5個參數

      Program name is /home/beichen/bin/P1 //給出程序的完整路徑和名字

      There are totally 5 parameters passed to this program //參數的總數

      The last is 0 //程序執行結果

      The parameters are this is a test program //返回有參數組成的字符串

      下面我們利用內部變量和位置參數編寫一個名為del的簡單刪除程序:

      #name: del

      #author: liangnian

      #this program to compress a file to the dustbin

      if test $# -eq 0

      then

      echo “Please specify a file!”

      else

      gzip $1 //先對文件進行壓縮

      mv $1.gz $HOME/dustbin //移動到回收站

      echo “File $1 is deleted !”

      fi

      三、變量表達式

      在上面我們編寫的小程序中我們用到了一個關鍵字test,其實它是shell程序中的一個表達式?D?D比較(test)。通過和shell提供的if等條件語句(后面我們會介紹)相結合我們可以方便的完判斷。

      其用法如下:

      test 表達式

      表達式所代表的操作符有字符串操作符、數字操作符、邏輯操作符以及文件操作符。其中文件操作符是一種shell獨特的操作符,因為shell里的變量都是字符串,為了達到對文件進行操作的目的,于是才提供了這樣的一種操作符。

      1、 字符串比較

      作用:測試字符串是否相等、長度是否為零,字符串是否為NULL(注:bash區分零長度字符串和空字符串)

      常用的字符穿操作符有:

      = 比較兩個字符串是否相同,同則為“是”!= 比較兩個字符串是否相同,不同則為“是”

      -n 比較字符串長度是否大于零,如果大于零則為“是”

      -z 比較字符串的穿度是否等于零,如果等于則為“是”

      2、 數字比較

      這里區別于其他編程語言,test語句不使用>?類似的符號來表達大小的比較,而是用整數式來表示這些。

      -eq 相等

      -ge 大于等于

      -le 小于等于

      -ne 不等于

      -gt 大于

      -lt 小于

      3、 邏輯操作! 反:與一個邏輯值相反的邏輯值

      -a 與(and):兩個邏輯值為“是”返回值才為“是”,反之為“否”

      -o 或(or):兩個邏輯值有一個為“是”,返回值就為“是”

      4、 文件操作

      文件測試表達式通常是為了測試文件的信息,一般由腳本來決定文件是否應該備份、復制或刪除。由于test關于文件的操作符有很多,我們只列舉一些常用的。

      -d 對象存在且為目錄返回值為“是”

      -f 對象存在且為文件返回值為“是”

      -L 對象存在且為符號連接返回值為“是”

      -r 對象存在且可讀則返回值為“是”

      -s 對象存在且長度非零則返回值為“是”

      -w 對象存在且可寫則返回值為“是”

      -x 對象存在且可執行則返回值為“是”

      file1 ?Cnt(-ot) file2 文件1比文件2新(舊)

      四、循環結構語句

      shell常見的循環語句有for循環、while循環、until循環

      for 循環

      語法:for 變量 in 列表

      do

      操作

      done

      注:變量是要在循環內部用來指代當前所指代的列表中的那個對象的。

      列表是在for 循環的內部要操作的對象,可以是字符串也可以是文件,如果是文件則為文件名。

      例:刪除垃圾箱中的所有.gz文件

      #delete all file with extension of “gz” in the dustbin

      for I in $HOME/dustbin/*.gz

      do

      rm ?Cf $i

      echo “$i has been deleted!”

      done

      執行結果如下:

      [beichen@localhost bin]$.f_rmgz

      /home/beichen/dustbin/nessus-4.0.0.2.tar.gz has been deleted!

      /home/beichen/dustbin/gftp-2.2.1.tar.gz has been deleted!

      While循環

      語法:while 表達式

      do

      操作

      done

      只要while表達式成立,do和done之間的操作就一直會進行。

      until循環

      語法:until 表達式

      do

      操作

      done

      重復do和done之間的操作直到表達式成立為止。

      例:

      #test until

      #add from 1 to 100

      total=0

      num=0

      until test num ?Ceq 100

      do

      total=`expr $total + $num` //注意,這里的引號是反引號,下同

      num=`expr $num+1`

      done

      echo “The result is $total”

      執行結果如下:

      [beichen@localhost bin]$until

      The result is 5050!

      五、條件語句

      Shell程序中的條件語句主要有if語句、case語句;

      If語句

      語法:if 表達式1 then

      操作

      elif 表達式2 then

      操作

      elif 表達式3 then

      操作

      …..

      else

      操作

      fi

      Linux里的if的結束標志是將if反過來寫成fi;而elif其實是else if的縮寫

      其中elif理論上可以有無限多個。

      Case語句

      語法:case 字符串 in

      值1|值2)

      操作::

      值3|值4)

      操作::

      值5|值6)

      操作::

      *}

      操作::

      esac

      case的作用就是當字符串與某個值相同是就執行那個值后面的操作。如果同一個操作對于多個值,則使用”|”將各個值分開。在case的每一個操作的最后面都有兩個”::”,分號是必須的。

      例:

      case $USER in

      beichen)

      Echo “You are beichen!”;;

      liangnian)

      echo “You are liangnian”; //注意這里只有一個分號

      echo “Welcome!”;; //這里才是兩個分號

      root)

      echo “You are root!:echo Welcome!”;; //將兩命令寫在一行,用一個分號作為分隔符

      *)

      echo “Who are you?$USER?”;;

      esac

      執行結果:

      [liangnian@localhost bin]$ test

      You are liangnian

      Welcome!

      關于shell編程基礎的東西就介紹這么多,如果你想更進一步了解shell編程的知識,請查閱相關書籍。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品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>