Bash 指令稿入門
Alex Scriven
Data Scientist
Python:
for x in range(3):
print(x)
0
1
2
R:
for (x in seq(3)){
print(x)
}
[1] 1
[1] 2
[1] 3
Bash 的基本結構相似:
for x in 1 2 3do echo $x done
1
2
3
Bash 有個方便的數值範圍寫法,稱為「大括號展開」:
{START..STOP..INCREMENT}for x in {1..5..2}do echo $x done
1
3
5
另一種常見寫法是「三段式」語法。
x=2)x<=4)x+=2)
for ((x=2;x<=4;x+=2))
do
echo $x
done
2
4
Bash 也能用 * 進行樣式比對展開,例如目錄中的檔案。
例如,假設資料夾 /books 中有兩個文字檔:
for book in books/*
do
echo $book
done
books/book1.txt
books/book2.txt
還記得用 $() 建立「殼中殼」嗎?
你可以直接在 for 迴圈裡呼叫!
假設資料夾結構如下:

我們可以針對殼中殼的結果進行迴圈:
for book in $(ls books/ | grep -i 'air')do echo $book done
AirportBook.txt
FairMarketBook.txt
類似 FOR 迴圈,但你會設定一個每次迭代都要測試的條件。
只要條件成立就持續迭代!
while 取代 for-le)&&(AND)或 ||(OR)來看個簡單例子:
x=1while [ $x -le 3 ];do echo $x ((x+=1)) done
1
2
3
小心無限 WHILE 迴圈,當中止條件永遠不成立時就會發生。
x=1
while [ $x -le 3 ];
do
echo $x
# 不要遞增 x。它永遠到不了 3!
# ((x+=1))
done
這會一直印出 1!
Bash 指令稿入門