bash 脚本编程六 循环,遍历目录

现在看看循环的写法:

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]

#!/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  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/bbfca1c38b5f185e6c5fe0a3ba18e460.html