shell編程入門(2)

來源:互聯網
上載者:User

shell的結構分為三大類:順序結構、分支結構和迴圈結構

1. if語句

文法格式:

if
<語句序列A>
then
<語句序列B>
fi

如果語句序列A中的最後一個命令的傳回值為0,則執行語句序列B中的命令,然後繼續執行fi以後的命令;如果語句序列A中的最後一個命令的傳回值為非0,則跳轉到fi並且繼續執行fi以後的命令,注意,在這裡A執行結果為0認為是真

if  test –f funfilethen  echo funfile existsfi
if [ -f funfile ]; then      echo funfile exists    echo hellofi

2. if-else語句

文法格式:

if
語句序列A
then
語句序列B
else
語句序列C
fi

如果語句序列A中的最後一個命令的傳回值為0,則執行語句序列B中的命令,然後繼續執行fi以後的命令;如果語句序列A中的最後一個命令的傳回值為非0,則執行語句序列C中的命令,然後繼續執行fi以後的命令。

任何命令的傳回值都可以作為判斷條件,也可以嵌套if語句,但必須保證if 和 fi配對。

if [ “$X” –lt 10 ]; then  echo X is less than 10else  if [ “$X” –gt 10 ]; then    echo X is greater than 10  else    echo X is equal to 10  fifi

也可以使用一種簡寫形式:elif來代替一個else if 嵌套。

3. case結構

文法結構:

case 單詞 in
模式A)
語句序列A
;;
模式B)
語句序列B
;;
...
esac

分支選擇是順序地對單詞和所提供的模式進行比較,如果一致,就執行後面的語句序列,然後跳轉到esac,並執行後續的語句。典型情況下,單詞是一個變數,而模式可以使用?, *等萬用字元。

case “$1” in  start)    start    ;;  stop)    stop    ;;  *)    echo “usage: $0 {start|stop}”    ;;esac

4. while語句

文法格式:

while
語句序列A
do
語句序列B
done

語句功能:依次執行語句序列A中的命令,如果語句序列A最後一個命令的傳回值為0,則執行語句序列B,回到步驟1,重複上面的過程,直到語句序列A中的最後一個命令的傳回值為非0。

x=1while ((x <= 10))do  echo x is $x  let x=x+1done

這裡解釋一下let命令,let在shell中執行算數運算。命名的參數可以在算術運算式中直接利用名稱訪問,不要前面帶有“$”符號。當訪問具名引數時,就作為算術運算式計算它的值。算術運算式按長整數進行求值,並且不檢查溢出。當然,用0作除數就產生錯誤。let的替代表示形式是:((算數運算式))

5. until語句

文法結構:

until
語句序列A
do
語句序列B
done

until語句和while語句只有在測試條件上是相反的,其他的都一樣。

6. for語句
文法結構

for var in list
do
語句序列A
done

1.如果list中還包含有token,則轉到步驟2,否則結束;2.var被設定為list中的下一個token;3.語句序列A中的命令被執行;4.返回步驟1

注意:這裡var的更新是每次迴圈後都替換為list中的下一個變數,不同於C語言中的迴圈計數

echo file list:for i in *; do  echo $idone

7. continue和break語句

如果在迴圈體中使用continue則跳出本次迴圈,進入下一次迴圈;使用break則跳出整個迴圈。

8. shell函數

函數是指令碼內的指令碼,使用函數比起使用一個新的指令碼可以大大加快調用速度。

有兩種函數格式:

(1)function 函數名
        {
            ...
        }

(2)函數名()
        {
            ...
        }

調用函數就像調用一個shell指令碼或者命令一樣,直接在寫函數名字,如果需要,還可以跟參數。shell尋找命令的順序是:別名,關鍵字,函數,內部命令,指令碼和可執行程式,所以函數可能屏蔽外部指令碼或者程式。

可以給函數傳遞參數,在函數中處理和在普通指令碼中處理參數基本一樣,使用$1等位置參數,或者$*,$#等,但¡在函數中的$0並不表示函數名,而仍然是指令碼的檔案名稱。

start(){  echo “第一個參數:$1”  echo “$0: $*”}

調用

start a b c

如果不作特殊說明,在函數內訪問的變數是整個指令碼共用的變數,如果要定義只在函數內有效局部變數,則需要使用local語句。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.