Linux Shell學習筆記八

來源:互聯網
上載者:User

第九學時  迴圈

基本文法:

while command

do

list

done

 

單行形式:

while command; do list; done

 

例如:

x=0

while [ $x -lt 10 ]

do

echo $x

x=$x+1

done

 

while迴圈最常用於檢查是否正確得到使用者的輸入。

1)將一個變數值設為空白。

2)當變數值不為空白就啟動一個存在的while迴圈。

3)在while迴圈中,詢問使用者問題並讀入使用者響應。

4)驗證響應的正確性。

5)若響應無效,則變數值再次設為空白,繼續迴圈。

6)直到響應有效,變數值不變,退出迴圈。

例如:

RESPONSE=

while [ -z "$RESPONSE" ];

do

echo "Enter the name of a files"

read RESPONSE

if [ ! -d "$RESPONSE" ]; then

echo "ERROR:Please enter a pathname"

RESPONSE=

fi

done

 

11.2 for和select迴圈

11.2.1 for迴圈

Shell的for迴圈類似於PHP的foreach迴圈,元素個數決定了迴圈的次數。

格式:

for name in word1 word2 word3 ... wordN

do

list

done

當word1到wordN是被空格分開的字元序列。for迴圈每次執行時,變數name的值都設為單詞清單中的下

一個單詞。第一次name被設為word1,第二次被設為word2等等。

 

11.2.2 select迴圈

類似於PHP中的select case語句

格式:

select name in word1 word2 word3 ... wordN

do

list

done

這裡name是變數名,word1到wordN是由空格分開的字元或單詞序列。

使用者做選擇後執行的命令集合由list指定。

select迴圈的執行過程如下:

1)list1中的每一項都和一個數字一起顯示。

2)顯示一個提示符,通常為#?。

3)當使用者輸入一個值時,$REPLY被賦予該值。

4)若$REPLY包含許多所顯示的項,則name所制定的變數賦值為list1中被選的項,否則list1中的項再次顯示。

5)當做了有效選擇後,執行list2

6)若list2沒有使用迴圈控制機制從select迴圈中推出,則整個過程從第一步重新開始。

 

select COMPONENT in comp1 comp2 comp3 all none

do

case $COMPONENT in

comp1|comp2|comp3) CompConf $COMPONENT ;;

all) CompConf comp1

    CompConf comp2

    ;;

none) break;;

*) echo "ERROR";;

esac

done

 

 

11.3 迴圈控制

1.break

2.continue

11.3.1 無限迴圈和break命令

互動式指令碼:

while:

do

read CMD

case $CMD in

[qQ]|[qQ][uU][iI][tT])break;;

*) precess $CMD ;;

esac

done

 

11.3.2 continue命令進入下一次迴圈

 

 

 

第十學時  參數

在Unix中,啟用一個命令的一般格式是:

command options files

這裡,command是命令名,options是指定的選項,files是命令應該操作的選出的檔案清單。

例如:$ls -l *.doc

Shell指令碼中應該堅持使用這種格式,以選項的形式作為參數。

 

處理傳給shell指令碼的選項的最常用方式有兩種:

1)使用case語句手工處理選項。

2)使用getopts命令處理選項。

對於只有一、兩個選項的指令碼建議使用case語句工作。

對於參數很多的,並且可以任意組合的,建議getopts,因為該命令在文法分析選項時有很大的靈活性。

 

12.1 特殊變數

變數描述

$0正在被執行命令的名字。對於Shell指令碼而言,這是被啟用命令的路徑

$n該變數與指令碼被啟用時所帶的參數相對應。第一個參數為$1,第二個參數為$2

$#提供給指令碼的參數號

$*所有參數都被雙引號引住。若一個指令碼接收兩個參數。$*等於$1$2

$@所有參數都被雙引號引住。若一個指令碼接收兩個參數。$*等於$1$2

$?前一命令執行後的退出狀態

$$當前shell的進程號。對於Shell指令碼,這是其正在執行的進程ID

$!前一個後台命令的進程號

 

12.2 選項和參數

可以在命令列給出選項以便改變指令碼或程式的行為。

命令的參數是指:在命令列中所有在命令名後出現的字串或單字。

而選項是指命令列行為的參數。

例如:

$ ls -aF fruit

命令為ls,參數為-aF和fruit.命令的選項是-aF

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.