
Короче говоря, у меня есть функция. Она называется "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 для исправления.