當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Shell腳本編程——for循環(huán)
1、本文是關(guān)于shell腳本編程中,對(duì)于for循環(huán)語(yǔ)句的使用總結(jié)。
2、語(yǔ)法格式
for 變量名 in 單詞表
do
命令表
done
3、變量名:即為用戶自定義變量
單詞表:對(duì)變量賦值的表單
命令表:循環(huán)執(zhí)行的shell命令
4、值得一問(wèn)的是,for語(yǔ)句既然作為一個(gè)循環(huán)語(yǔ)句,那他是如何實(shí)現(xiàn)循環(huán)的呢?循環(huán)次數(shù)跟誰(shuí)有關(guān)呢?很簡(jiǎn)單,循環(huán)的次數(shù)跟單詞表中單詞的個(gè)數(shù)相同!
5、如圖1所示,此程序中單詞表為:1 2 3 4。單詞個(gè)數(shù)為四個(gè),因此for語(yǔ)句循環(huán)執(zhí)行4次。
6、知道了循環(huán)的次數(shù)與單詞表的單詞數(shù)相同,那每次循環(huán)for語(yǔ)句又是如何執(zhí)行的呢?如圖1所示的程序中:
a) 第三行程序:變量A依次被賦值為:1、2、3、4。
b) 因此第六行打印語(yǔ)句需執(zhí)行四次:第一次打印1、第二次打印2、...第四次打印4。
c) $A:在這里$是獲取變量A的值
總之:需要將單詞表中的單詞依次賦值給變量A,同時(shí)每賦值一次,都需執(zhí)行一次do...done之間命令表的內(nèi)容。
7、舉個(gè)相似的例子,如圖2所示。
a) $* :所有命令行的參數(shù)(除第一個(gè):執(zhí)行語(yǔ)句除外)。
b) 此程序中的單詞表:hello 、world、huaqing、yuan、jian
c) 即for語(yǔ)句循環(huán)執(zhí)行五次。執(zhí)行結(jié)果如圖所示。
8、再舉個(gè)的例子,如圖3所示。
a) 第3行 :建立一個(gè)名為dir的目錄
b) 第4行 :將ls命令的執(zhí)行結(jié)果提取出來(lái)賦值給list變量
c) list :在此程序中相當(dāng)于單詞表。list的單詞數(shù)是由ls命令結(jié)果決定的,即當(dāng)前路徑下有多少個(gè)文件,list就有幾個(gè)單詞。
d) 第6行 :將list里的單詞依次賦值給變量A,并執(zhí)行do...done里的內(nèi)容
e) 第8行 :判斷是否為普通文件
f) 第10行:判斷如果是普通文件則拷貝該文件到目錄dir下(-f 判斷普通文件)
g) 第11行:打印提示信息及已拷貝的文件名
9、執(zhí)行結(jié)果如圖4所示
命令一:$ ls
查看當(dāng)前路徑下所有文件及文件夾。
命令二:$ ./1.sh
執(zhí)行1.sh腳本文件。會(huì)在終端上打印信息,即源文件11行的執(zhí)行結(jié)果。
命令三:$ ls
執(zhí)行結(jié)束后再次查看,會(huì)出現(xiàn)dir目錄文件,即源文件3行的執(zhí)行結(jié)果。
命令四:$ ls dir/
查看dir/目錄下的文件,會(huì)顯示已拷貝的普通文件,即源文件8、9、10行的執(zhí)行結(jié)果。