迴圈
迴圈用來處理「一堆檔」或「一直等到條件成立」。Bash 最常用的是 for 與 while。
for 走清單
in 後面由 shell 展開。沒有匹配到任何 *.txt 時,有些設定會把字面上的 *.txt 當成檔名。較穩的寫法:
參數逐個處理:
一定要用 "$@",不要用無引號的 $@ 或 $*,否則有空白的檔名會裂開。
數列:
while 讀檔或等到成功
IFS=避免把行首行尾空白切掉-r避免反斜線被當成跳脫< 檔把檔案接到迴圈的 stdin
讀指令輸出:
注意:管線右邊的 while 在子 shell 裡跑,裡面改的變數迴圈結束後會消失。要累加計數,改用 here-string 或程序替換:
跳過與提前結束
continue:下一輪break:離開迴圈
不要用 for 讀檔的每一行
讀行請用 while read。for 適合「已經是分開的項目」:檔名、參數、數字。
總結
清單用 for ... in "$@" 或 *.ext;讀行用 while read。迴圈裡的指令失敗時,搭配 條件判斷 與 set -e 決定要停還是繼續。重複出現的片段可以抽成 函式。