간단히 말해서 기능이 있습니다. 이하에서는 "개월_및_일"이라고 합니다. 목적은 하루에 24개의 로그를 생성하여 "연-월" 디렉터리에 배치하는 것입니다.
아래에는 "main"이라는 두 번째 함수가 있습니다. 12개월 동안 주로 간단한 for 루프를 기반으로 디렉터리를 만듭니다. 기본 함수는 이러한 디렉터리를 생성한 후 "months_and_days" 함수를 호출하여 더미 로그 파일을 채웁니다.
어떤 이유로 처음 몇 달 동안만 "2018-01" 디렉터리를 생성하고 채운 다음 중지됩니다.
이전에는 bash에서 스크립트를 작성한 적이 없으므로 왜 Month_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(1월의 일 수보다 1 더 많음)이므로 $months보다 크므로 작업이 중지됩니다.
하나 추가
local i
Month_and_days의 첫 번째 줄로 수정하세요.