zoukankan      html  css  js  c++  java
  • shell编程之如何遍历进入当前目录下的所有子目录

    问题:

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

    第一种情况:

    假设目录结构为:

    fme/

         |__clean.sh 

         |__dc250/clean.sh

         |__dc300/clean.sh

         |__dc350/clean.sh

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

    实现方法如下:

     #!/bin/bash

     for dir in `ls .`
     
    do
       
    if [ -d $dir ]
       then
         echo $dir
         cd $dir
         . clean.sh
         cd ..
       fi
    done 

     

    这里需要学习的是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

     

    第二种情况:

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

    #!/bin/bash
    for dir in `find . -name clean.sh`
    do
      path
    =`dirname $dir`
      
    if [ $path != . ]
      then
        echo $path
        cd $path
        . clean.sh
        cd 
    -
      fi

    done

    学习点:

    搜索某个文件:

    find . -name clean.sh

    提取出路径名

    dirname path

    字符串判断

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

  • 相关阅读:
    四、jdk工具之jstat命令2(Java Virtual Machine Statistics Monitoring Tool)详解
    Blob、InputStream、byte[]、String互转
    从 iBatis 到 MyBatis
    MySQL类型之(字符串列类型区分、数据类型区分)
    实体机与虚拟机linux文件互拷贝
    高并发高负载的大型网站系统架构
    JDK的动态代理深入解析(Proxy,InvocationHandler)(转)
    mysql索引之九:重复索引和冗余索引,索引和锁
    linux时间同步,ntpd、ntpdate
    mysql函数之十:mysql 字符串类型及二进制字符串类型大小写比较
  • 原文地址:https://www.cnblogs.com/liuokay/p/2139493.html
Copyright © 2011-2022 走看看