创建Unix脚本以检查目录和子目录

时间:2014-04-27 01:10:50

标签: linux shell unix ksh

我正在使用Korn shell完成以下某项任务。

对于参数列表中的每个参数(成为当前路径名):

  1. 检查当前路径名是否为目录,如果是,请执行以下操作:
  2. 使用null(空)字符串初始化变量maxsubdir,和 a maxentries变量为0;
  3. 对于目录中的每个条目,检查该条目是否代表a 目录,如果是,请查找其中的条目数 包含ls -lwc的管道的子目录,并保存 导致名为curentries的变量。
  4. 比较治疗方法和maxentries,如果治疗方法更大, 更新maxsubdir和maxentries。 (--10分)
  5. 当目录的for周期完成后,显示(带有 echo)目录名,maxsubdir和maxentries(适当的 说明文字。)
  6. 如果a)中的路径名不是目录,则显示路径名 以及说明路径名不代表的解释性文字 目录。
  7. 转到下一个命令行参数(路径名)并重复1-7
  8. 处理完所有路径名后,脚本的执行结束(while已完成)

    这是我到目前为止的代码(已编辑):

    #!/bin/ksh
    
    directoy=$1
    while [ $# -ne 0 ]; do
        if [ -d $1 ]; then
            maxsubdir=
            maxentries=0
            for x in $1; do
                echo "Checking if $1 represents a directory..\n"
                curentries="ls -l | wc"
                if [ $curentries > $maxentries ]; then
                    maxentries=$curentries
                    maxsubdir=$curentries
                fi; 
            done
            echo "The directory structure of $1 is … \n"
            echo "Maximum sub directories: \n"
            echo "$maxsubdir\n"
            echo "Maximum directory entries: \n"
            echo "$maxentries"
        fi
    done
    
    1. 我需要在哪里插入" shift"命令,因为我Unix只能处理有限数量的参数?

    2. 我的语法合适吗?或者排序行上是否有语法错误?

    3. 脚本似乎运行但不会产生输出到屏幕?也许它是无止境的?

2 个答案:

答案 0 :(得分:0)

看看这里,看看这是否有帮助。解释在代码中。

#!/bin/ksh

    directory=$1

    # check whether the entered path is a directory
    if [ -d $1 ];then # yes, it's a directory
            maxsubdir=null
            maxentries=0
            echo "$1 is a directory"

            # you are only counting lines, add -l to wc
            # also you have to not count the first line. it's returns the size
            curentries=`ls -l $1 | wc -l`
            echo ${curentries}
    fi

答案 1 :(得分:0)

  1. 你不是。
  2. 你确实有一些错误。
  3. 或许,它永远不会达到那个代码?
  4. 您的作业专门用于使用for循环,并且您已实施while循环。

    我会让你开始:

    for directory in $*; do
      cd "$directory"
      curentries=$(ls -1 | wc -l)
      for entry in $(ls -1); do
        ...
      done
    done