Shell脚本遍历目录

时间:2021-01-13 08:47:10

这里,主要通过该脚本来练习Shell函数的写法,其功能主要是用来递归地遍历Unix目录,列出其中的文件和目录,并且能够通过缩进来展示文件的目录层级关系。

tree.sh:

function listFiles()
{
        #1st param, the dir name
        #2nd param, the aligning space
        for file in `ls $1`;
        do
                if [ -d "$1/$file" ]; then
                    echo "$2$file"
                    listFiles "$1/$file" "   $2"
                else
                    echo "$2$file"
                fi
        done
}
listFiles $1 ""

通过该脚本主要掌握下面几点:

  • Shell脚本中定义函数的方法。

    注意,在访问函数参数时的方法。$n的含义是取第n个参数。

  • Shell脚本中双引号的作用。

    命令行中的字符可以分为两类:文本字符(literal)和元字符(meta)。 literal也就是普通纯文字,对 shell 来说没特殊功能;meta对shell来说,具有特定功能的特殊保留字符。

    最常见的保留字符有两个:IFS<space><tab><enter>三者之一组成(我们常用space),IFS是用来拆解 command line的每一个词(word)用的,因为shell command line是 按词来处理的;CR则是用来结束command line用的,这也是为何我们敲<enter>命令就会跑的原因。

    有时候,我们希望shell将meta字符作为普通的literal字符处理,也求是去掉原有的shell保留字符的语义,仅仅作为一个文本字符处理。这时候就需要对这些字符进行quoting处理。

    常用的 quoting 有如下三种方法:hard quote,’ ’ (单引号),凡在hard quote中的所有meta均被关闭;soft quote,” ” (双引号),在 soft quoe 中大部份meta都会被关闭,但某
    些则保留(如$);escape,\ (反斜线),只有紧接在escape(跳脱字符)之后的单一meta才被关闭。

运行效果:

$ sh tree.sh .
test
   a.txt
   b.txt
   good
      game
      of
      thrones
   hah.txt
tree.sh