2016-03-03 49 views
0

我有下面的代碼:遞歸循環不會啓動

count=0 

countIt(){ 

cd "$1" 

for d in "$1"; do 
if [ -d $d ]; 
    then 
    count=$((count+1)) 
    countIt "$d" 
fi 
done 

} 

我打電話來與目錄作爲參數,這種功能。

所以我在這裏試圖做的就是遞歸地計算這個函數在調用該函數時通過位於目錄中的目錄循環通過的參數的次數。

我只將目錄放入該初始文件夾來測試功能,但if語句似乎並沒有執行爲true,因此遞歸永遠不會發生。

我對shell非常陌生,我在網上查找了一些遞歸函數,但我仍然無法弄清楚我在這裏做了什麼錯誤,因此任何建議都將不勝感激!

+0

這是爲了好玩嗎,還是實際上需要計算樹中的目錄數? –

回答

0

嘗試把這個在countdirs.sh文件:

count=0 

countIt(){ 
    for d in "$1"/*; do 
    if [ -d "$d" ]; then 
     count=$((count+1)) 
     countIt "$d" 
    fi 
    done 
} 
countIt "$1" 
echo "Found $count directories and subdirectories" 

然後運行:

chmod +x countdirs.sh 
./countdirs.sh somedir 

哪裏somedir是指望子目錄的目錄。

然而,你可以這樣做統計:

find "$1"/* -type d | wc -l 

運行的第一部分(前管|),所以你可以看到輸出,那麼你就會明白,廁所-l對從行數管道輸出。

+0

真的很有趣我確實發現了它,但忘了修復那裏... 謝謝 – Eduardo

+0

只需添加/ *並沒有訣竅。這到底是什麼意思呢?你也可以解釋find語句的「-maxdepth 0 | wc -l」部分嗎? – Daeto

+0

更新了我的回覆。 – Eduardo