Цикл останавливается после вызова другой функции

Цикл останавливается после вызова другой функции

Короче говоря, у меня есть функция. Она называется "months_and_days" внизу. Ее цель — создавать 24 журнала в день и помещать их в каталог "year-month".

У меня есть вторая функция под названием "main" внизу. Main создает каталоги на основе простого цикла for для 12 месяцев. После того, как функция main создает эти каталоги, она вызывает функцию "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

i— это глобальная переменная, которая изменяется в обеих функциях mainи months_and_days. Так что после первого вызова months_and_days значение i равно 32 (на один больше, чем количество дней в jan), то есть больше, чем $months, так что все останавливается.

Добавить

local i

как первую строку в months_and_days для исправления.

Связанный контент