第九學時 迴圈
基本文法:
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