bash 脚本编程六 循环,遍历目录
bash 脚本编程六 循环,遍历目录
现在看看循环的写法:
- for v in ...
- do
- ...
- done
- #!/bin/bash
- for v in man woman child
- do
- echo $v
- done
- $ ./test.sh
- man
- woman
- child
就是...可以用 空格隔开的若干个值表示
再进一步,打开一个目录,遍历其中的文件(不递归)
[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
注意,如果要防止换行,可以用双引号去掉里面包含的换行符。
- #!/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
- $ ./test.sh
- 0
- 1
- 2
- 3
- 4
评论暂时关闭