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