For loop para após chamar outra função

For loop para após chamar outra função

Resumindo, tenho uma função. É chamado de "meses_e_dias" abaixo. Sua finalidade é criar 24 logs por dia e colocá-los em um diretório “ano-mês”.

Eu tenho uma segunda função chamada "main" abaixo. Principal criar diretórios com base em um loop for simples por 12 meses. Depois que a função principal cria esses diretórios, ela chama a função "meses_e_dias" para preenchê-los com arquivos de log fictícios.

Por alguma razão, ele apenas cria e preenche o diretório "2018-01" dos primeiros meses e depois para ...

Eu nunca criei scripts no bash antes, então não sei por que, após o término demonths_and_days, ele não volta para a função principal para concluir seu loop.

Preciso chamar a função principal novamente e manter uma variável global para o loop principal?

Código abaixo:

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

Responder1

ié uma variável global que está sendo alterada nas funções maine months_and_days. Portanto, após a primeira chamada para meses_e_dias, o valor de i é 32 (um a mais que o número de dias em janeiro), portanto é maior que $ meses, então as coisas param.

Adicione um

local i

como a primeira linha em meses_e_dias para corrigir isso.

informação relacionada