Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / bash 脚本编程六 循环,遍历目录

现在看看循环的写法:
  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.   
  10. for f in ~/Downloads/*.jpg  
  11. do  
  12.     echo $f  
  13. 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.   
  10. for f in "$HOME/Downloads/*.jpg"  
  11. do  
  12.     echo $f  
  13. 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