清單式的寫法好處就在,如果我們要for迴圈處理的資料是檔案,或者像清單列表一樣,我們就可以使用這個方式。缺點就是,需要INDEX或者要步進值的時候,可能就要自己而外處理,就像昨天的範例 NO 一樣。
Bash Script 除了昨天介紹的 for 變數 in 清單 這寫法外,也有像程式語言一樣的寫法。
清單式的寫法好處就在,如果我們要for迴圈處理的資料是檔案,或者像清單列表一樣,我們就可以使用這個方式。缺點就是,需要INDEX或者要步進值的時候,可能就要自己而外處理,就像昨天的範例 NO 一樣。
OK!來複習一下 for 迴圈的第二種寫法:
for (( expr1; expr2; expr3 ))
do
command1
command2
…
done
expr1 ~ expr3 昨天介紹過了,現在直接來看範例:
#!/bin/bash
for (( i=0; i<5; i++ ))
do
echo "這次第 $i 個迴圈..."
done
看出了嗎?
expr1 初始化:我給予一個變數i的值為0
expr2 終止條件:當 i<5 不成立時,迴圈就會無止境的執行下去
expr3 步進值:每當執行一次迴圈,就會執行一次 i++
當然,expr3 不一定要寫成 i++,你也可以寫 ++i 或者 **i=$((i+1))**都行。反正不管寫什麼,只要記住,每執行一次迴圈,這裡就會被執行一次。
所以結果也是顯而易見的:
最後,公布一下昨天的答案囉!!
昨天的題目是, 將目錄底下所有 test 開頭的檔案全部改成 example 開頭
答案其實真的很簡單,只要會改一個檔案,就可以讓電腦幫我們改全部。
因為考慮到可能有能對 linux 不熟習,請允許我用最簡單的方式來介紹(其實是想充版面吧)
首先:我在該目錄底下有以下這些檔案:
所以我如果手動改可能要下以下這些指令 (mv 原檔案名稱 新檔案名稱),才能完成我的需求。
mv test1.sh exampletest1.sh
mv test2.sh exampletest2.sh
mv testDay04-1.sh exampletestDay04-1.sh
mv testDay05-1.sh exampletestDay05-1.sh
mv testDay06-1.sh exampletestDay06-1.sh
方法一:把以上這些命令放到一個 .sh 的檔案中,然後執行它。
可是,如果檔案有一百個,兩百個不是打到天黑地暗
所以,我們一定要用昨天介紹的 for 迴圈來完成,這樣一來檔案越多,就省了越多功夫和打字的時間。
for MY_FILE in test*
do
mv $MY_FILE example$MY_FILE
done
小技巧:因為這牽扯到修改檔案,所以會建議先以 echo 取代 mv,先觀察一下有沒有錯,再執行!免得一失足成千古恨,『我回不去了』
所以我還是先執行這個範例 example7_3.sh
!#/bin/bash
for MY_FILE in test*
do
echo "mv $MY_FILE example$MY_FILE"
done
結果:
當然,這只是個小小小小的範例,所以會覺得五行程式碼變四行,好像還好!可是如果是兩三百個檔案呢?那就是兩三百行變四行阿,以投資報酬率來算,真的是很划算。O(n)
鐵人賽文章分享
上一篇 for 迴圈的第一種形式
下一篇 for 迴圈的第三種形式