接下來我們將以兩個概念依序介紹迴圈
正文開始~
迭代的概念就是一列排隊排好的物件,從第一個開始依序裝箱存到變數裏面,做一些處理之後,箱子回到下一個物件的前面,第二個物件再跳進去箱子,做一些處理,依照這樣的順序直到最後一個物件也執行完之後,這整個迴圈才結束。
迭代這個概念適合用 for 語法來實作,有了概念之後先來看一下語法吧。
for 變數 in 物件1 物件2 物件3
do
程式碼
done
因此回想剛剛提到的迭代概念,物件1 跳進目前的變數,執行程式碼到 done 之後,變數回到一開始的 for,然後內容改裝物件2,直到物件3也結束之後整個迴圈才算完成。
例如我們想要從 1 印到 10,我們可以這樣寫:
for i in {1..10}
do
echo "$i"
done
其中 {1..10} 相當於
1 2 3 4 5 6 7 8 9 10
也可以這樣寫
$(seq 1 10)
或是用下面介紹的語法來完成
for ((初始值;判斷式;步數間隔))
do
程式碼
done
那回想剛剛的例子,從 1 印到 10 我們該怎麼做呢?
for ((i=1;i<=10;i++))
do
echo "$i"
done
代表 i 的初始值是 1,當 i 小於或等於 10的時候,就執行 echo "$i"
,每執行完一次 i 就加 1,直到 i > 10的時候才跳到 done,結束這個迴圈。
因此上述的三種寫法得到的結果呈現如下:
$ ./one_to_ten.sh
1
2
3
4
5
6
7
8
9
10
PATH 環境變數中存着很多腳本執行檔的路徑,因此我們寫一個腳本判斷底下的檔案是否可以執行,並作數量統計。
1 #!/bin/bash
2
3 IFS=":" #把PATH變數 路徑1:路徑2:路徑3 拆成 路徑1 路徑2 路徑3,方便等一下的變數能夠迭代
4 count=0 #記錄可執行檔的個數
5 non_count=0 #記錄不可執行檔的個數
6
7 for directory in $PATH
8 do
9 if [ -d "$directory" ] # 判斷是否是路徑
10 then
11 for command in "$directory"/* # 尋訪路徑下的所有檔案
12 do
13 if [ -x "$command" ] # 判斷檔案是否可執行
14 then
15 count=$(( $count + 1 ))
16 else
17 echo "[注意!] 偵測到不可執行的命令: $command"
18 non_count=$(( $non_count + 1 ))
19 fi
20 done
21 fi
22 done
23
24 echo "總共有 $count 個可執行命令, $non_count 個不可執行命令"