El bucle For se detiene después de llamar a otra función

El bucle For se detiene después de llamar a otra función

En pocas palabras, tengo una función. Se llama "meses_y_días" más abajo. Su propósito es crear 24 registros por día y colocarlos en un directorio "año-mes".

Tengo una segunda función llamada "principal" a continuación. Main crea directorios basados ​​en un bucle for simple durante 12 meses. Después de que la función principal crea esos directorios, llama a la función "meses_y_días" para completarlo con archivos de registro ficticios.

Por alguna razón, solo crea y llena el directorio de los primeros meses "2018-01" y luego se detiene...

Nunca antes había escrito un script en bash, así que no estoy seguro de por qué después de que finaliza Months_and_days, no vuelve a la función principal para completar su ciclo.

¿Tengo que volver a llamar a la función principal y mantener una variable global para el bucle principal?

Código a continuación:

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

Respuesta1

ies una variable global que se está modificando tanto en las funciones maincomo months_and_days. Entonces, después de la primera llamada a meses_y_días, el valor de i es 32 (uno más que el número de días en enero), por lo que es mayor que $meses, por lo que las cosas se detienen.

Agrega un

local i

como primera línea en meses_y_días para solucionarlo.

información relacionada