現在看看循環的寫法:
- for v in ...
- do
- ...
- done
寫個簡單的例子看一下:
- #!/bin/bash
- for v in man woman child
- do
- echo $v
- done
輸出結果為:
- $ ./test.sh
- man
- woman
- child
for in的寫法和很多現代語言相近。
就是...可以用 空格隔開的若干個值表示
再進一步,打開一個目錄,遍歷其中的文件(不遞歸)
[plain] view plaincopyprint?
- #!/bin/bash
- cd ~/Downloads
- for f in *.jpg
- do
- echo $f
- done
運行結果:
- ./test.sh
- 08_avatar_middle.jpg
- 84e_4ffbfce3_9ab8_d9c2_b577_acbfc7edbfc2_1.jpg
- DSCN0743.jpg
- IMAG0611.jpg
- IMG_20120423_135302 (1).jpg
- IMG_20120423_135302.jpg
- IMG_20120423_144215 (1).jpg
- IMG_20120423_144215.jpg
- psb.jpg
- ssh2-300x259.jpg
這是一個很簡單的遍歷當前目錄的文件的方法。
如果加上目錄路徑也行。不一定非要切換當前目錄。
下面這個例子添加了檢測目錄是否存在的邏輯:
- #!/bin/bash
- if [ -d ~/Downloads ]
- then
- echo '~/Downloads folder exists'
- else
- echo "~/Downloads folder doesn't exist"
- exit
- fi
-
- for f in ~/Downloads/*.jpg
- do
- echo $f
- done
~ 可以用 $HOME來替代。
注意,如果要防止換行,可以用雙引號去掉裡面包含的換行符。
- #!/bin/bash
- if [ -d $HOME/Downloads ]
- then
- echo '~/Downloads folder exists'
- else
- echo "~/Downloads folder doesn't exist"
- exit
- fi
-
- for f in "$HOME/Downloads/*.jpg"
- do
- echo $f
- done
注意f in 後面 多了雙引號。顯示的結果就變了:
- ./test.sh
- ~/Downloads folder exists
- /home/chenshu/Downloads/08_avatar_middle.jpg /home/chenshu/Downloads/84e_4ffbfce3_9ab8_d9c2_b577_acbfc7edbfc2_1.jpg /home/chenshu/Downloads/DSCN0743.jpg /home/chenshu/Downloads/IMAG0611.jpg /home/chenshu/Downloads/IMG_20120423_135302 (1).jpg /home/chenshu/Downloads/IMG_20120423_135302.jpg /home/chenshu/Downloads/IMG_20120423_144215 (1).jpg /home/chenshu/Downloads/IMG_20120423_144215.jpg /home/chenshu/Downloads/psb.jpg /home/chenshu/Downloads/ssh2-300x259.jpg
如果想要一個變量遞增,可以這樣寫:
- #!/bin/bash
- i=0
- while [ $i -lt 5 ]
- do
- echo $i
- let i++
- done
這裡用了while循環,顯示結果:
- $ ./test.sh
- 0
- 1
- 2
- 3
- 4