For 迴圈在呼叫另一個函數後停止

For 迴圈在呼叫另一個函數後停止

長話短說,我有一個功能。下面稱為“months_and_days”。其目的是每天建立24個日誌,並將它們放在「年-月」目錄中。

下面我有第二個函數,名為「main」。主要基於 12 個月的簡單 for 迴圈建立目錄。主函數建立這些目錄後,它會呼叫“months_and_days”函數來填入虛擬日誌檔案。

由於某種原因,它只創建並填充前幾個月的目錄“2018-01”,然後停止...

我以前從未在 bash 中編寫過腳本,所以我不確定為什麼在months_and_days 完成後,它不會返回到主函數來完成它的循環。

我是否必須再次呼叫主函數並為主循環保留一個全域變數?

程式碼如下:

months=12
testDir=/home/name/bashScripts/testDir
fileToCopyPath=/opt/logs/192.168.217.129/2019-11/1-192.168.217.129-2019-11-24-13.log
currentMonth=0



function months_and_days () {
        declare -a daysArr=(31 28 31 30 31 30 31 31 30 31 30 31)
        for ((i=1; i<=${daysArr[$1]}; i++))
                do
                        for ((j=0; j<=23; j++ ))
                        do
                                if [ $j -le 9 ]
                                then
                                        tar -czvf $testDir/2018-$currentMonth/1-192-168-217-129-2018-$currentMonth-$i-0$j.tar.gz $fileToCopyPath
                                else
                                        tar -czvf $testDir/2018-$currentMonth/1-192-168-217-129-2018-$currentMonth-$i-$j.tar.gz $fileToCopyPath
                                fi
                        done
                done
}

function main () {
for ((i=1; i<=$months; i++))
do
        if [ $i -le 9 ]
        then
                mkdir $testDir/2018-0$i
                chmod 775 $testDir/2018-0$i
                currentMonth=0$i
                months_and_days "$i-1"

        else
                mkdir $testDir/2018-$i
                chmod 775 $testDir/2018-$i
                currentMonth=$i
                months_and_days "$i-1"
        fi
done
}

main

答案1

imain是一個全域變量,在和函數中都會被更改months_and_days。因此,在第一次呼叫 Months_and_days 後,i 的值是 32(比 1 月的天數多 1),因此大於 $months,所以事情停止了。

添加一個

local i

作為 Month_and_days 中的第一行來修復它。

相關內容