歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> bash 腳本編程六 循環,遍歷目錄

bash 腳本編程六 循環,遍歷目錄

日期:2017/3/1 10:09:37   编辑:Linux編程

現在看看循環的寫法:

  1. for v in ...
  2. do
  3. ...
  4. done
寫個簡單的例子看一下:
  1. #!/bin/bash
  2. for v in man woman child
  3. do
  4. echo $v
  5. done
輸出結果為:
  1. $ ./test.sh
  2. man
  3. woman
  4. child
for in的寫法和很多現代語言相近。

就是...可以用 空格隔開的若干個值表示


再進一步,打開一個目錄,遍歷其中的文件(不遞歸)

[plain] view plaincopyprint?
  1. #!/bin/bash
  2. cd ~/Downloads
  3. for f in *.jpg
  4. do
  5. echo $f
  6. done
運行結果:
  1. ./test.sh
  2. 08_avatar_middle.jpg
  3. 84e_4ffbfce3_9ab8_d9c2_b577_acbfc7edbfc2_1.jpg
  4. DSCN0743.jpg
  5. IMAG0611.jpg
  6. IMG_20120423_135302 (1).jpg
  7. IMG_20120423_135302.jpg
  8. IMG_20120423_144215 (1).jpg
  9. IMG_20120423_144215.jpg
  10. psb.jpg
  11. ssh2-300x259.jpg
這是一個很簡單的遍歷當前目錄的文件的方法。

如果加上目錄路徑也行。不一定非要切換當前目錄。

下面這個例子添加了檢測目錄是否存在的邏輯:

  1. #!/bin/bash
  2. if [ -d ~/Downloads ]
  3. then
  4. echo '~/Downloads folder exists'
  5. else
  6. echo "~/Downloads folder doesn't exist"
  7. exit
  8. fi
  9. for f in ~/Downloads/*.jpg
  10. do
  11. echo $f
  12. done
~ 可以用 $HOME來替代。

注意,如果要防止換行,可以用雙引號去掉裡面包含的換行符。

  1. #!/bin/bash
  2. if [ -d $HOME/Downloads ]
  3. then
  4. echo '~/Downloads folder exists'
  5. else
  6. echo "~/Downloads folder doesn't exist"
  7. exit
  8. fi
  9. for f in "$HOME/Downloads/*.jpg"
  10. do
  11. echo $f
  12. done

注意f in 後面 多了雙引號。顯示的結果就變了:

  1. ./test.sh
  2. ~/Downloads folder exists
  3. /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

如果想要一個變量遞增,可以這樣寫:

  1. #!/bin/bash
  2. i=0
  3. while [ $i -lt 5 ]
  4. do
  5. echo $i
  6. let i++
  7. done
這裡用了while循環,顯示結果:
  1. $ ./test.sh
  2. 0
  3. 1
  4. 2
  5. 3
  6. 4
Copyright © Linux教程網 All Rights Reserved