Shell腳本遞歸遍歷目錄

這里,主要通過該腳本來練習Shell函數(shù)的寫法,其功能主要是用來遞歸地遍歷Unix目錄,列出其中的文件和目錄,并且能夠通過縮進來展示文件的目錄層級關(guān)系。

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腳本中定義函數(shù)的方法。

    注意,在訪問函數(shù)參數(shù)時的方法。$n的含義是取第n個參數(shù)。

  • Shell腳本中雙引號的作用。

    命令行中的字符可以分為兩類:文本字符(literal)和元字符(meta)。 literal也就是普通純文字,對 shell 來說沒特殊功能;meta對shell來說,具有特定功能的特殊保留字符。

    最常見的保留字符有兩個:IFS<space><tab><enter>三者之一組成(我們常用space),IFS是用來拆解 command line的每一個詞(word)用的,因為shell command line是 按詞來處理的;CR則是用來結(jié)束command line用的,這也是為何我們敲<enter>命令就會跑的原因。

    有時候,我們希望shell將meta字符作為普通的literal字符處理,也求是去掉原有的shell保留字符的語義,僅僅作為一個文本字符處理。這時候就需要對這些字符進行quoting處理。

    常用的 quoting 有如下三種方法:hard quote,' ' (單引號),凡在hard quote中的所有meta均被關(guān)閉;soft quote," " (雙引號),在 soft quoe 中大部份meta都會被關(guān)閉,但某
    些則保留(如$);escape,\ (反斜線),只有緊接在escape(跳脫字符)之后的單一meta才被關(guān)閉。

運行效果:

$ sh tree.sh .
test
   a.txt
   b.txt
   good
      game
      of
      thrones
   hah.txt
tree.sh
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容