shell编程之如何遍历进入当前目录下的所有子目录(转)

问题:

我想在顶层目录下编写一个脚本来调用自录下的clean.sh文件,该如何实现?

第一种情况:

假设目录结构为:

fme/

     |__clean.sh 

     |__dc250/clean.sh

     |__dc300/clean.sh

     |__dc350/clean.sh

现在我在fme结构下编写一个clean.sh文件调用各个子目录下的clean.sh文件。

实现方法如下:

 #!/bin/bash

shell编程之如何遍历进入当前目录下的所有子目录(转)
 for dir in `ls .`

do

if[-d$dir]

then

echo$dir

cd$dir

.clean.sh

cd..

fi

done 
shell编程之如何遍历进入当前目录下的所有子目录(转)

这里需要学习的是if的判断语句。

文件表达式
if [ -f  file ]    如果文件存在
if [ -d ...   ]    如果目录存在
if [ -s file  ]    如果文件存在且非空 
if [ -r file  ]    如果文件存在且可读
if [ -w file  ]    如果文件存在且可写
if [ -x file  ]    如果文件存在且可执行
整数变量表达式
if [ int1 -eq int2 ]    如果int1等于int2   
if [ int1 -ne int2 ]    如果不等于    
if [ int1 -ge int2 ]       如果>=
if [ int1 -gt int2 ]       如果>
if [ int1 -le int2 ]       如果<=

if [ int1 -lt int2 ]       如果< 

字符串变量表达式
If  [ $a = $b ]                 如果string1等于string2
                                字符串允许使用赋值号做等号
if  [ $string1 !=  $string2 ]   如果string1不等于string2       
if  [ -n $string  ]             如果string 非空(非0),返回0(true)  
if  [ -z $string  ]             如果string 为空

if  [ $sting ]                  如果string 非空,返回0 (和-n类似)  

此问题就这样解决了。

还学习到了一个遍历所有子目录的表达方式:

find . -type d | while read dir; do echo $dir; done

第二种情况:

第一种情况是两层次的目录是父子关系,因此可以上面的方法实现。若两个层次上的目录并不是直接的父子关系,这时候在用上面的方法显然不合适。这里采用更加简洁的方法,第一种情况亦可以用。

shell编程之如何遍历进入当前目录下的所有子目录(转)
#!/bin/bash

fordirin`find.-nameclean.sh`

do

path=`dirname$dir`

if[$path!=.]

then

echo$path

cd$path

.clean.sh

cd-

fi

shell编程之如何遍历进入当前目录下的所有子目录(转)

done

学习点:

搜索某个文件:

find . -name clean.sh

提取出路径名

dirname path

字符串判断

if [ $path != . ] ; 原来点就可以直接作为字符串

相关推荐