长话短说,我有一个功能。下面称为“months_and_days”。其目的是每天创建24条日志,并将它们放在“年-月”目录中。
下面我有第二个函数,名为“main”。主要基于 12 个月的简单 for 循环创建目录。主函数创建这些目录后,它会调用“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(比 1 月的天数多 1),因此大于 $months,所以事情停止了。
添加一个
local i
作为 Month_and_days 中的第一行来修复它。