Не могли бы вы помочь мне исправить мое назначение ротации журналов?
Мой bash-скрипт должен принимать обязательный целочисленный параметр и необязательный строковый параметр.Целое число - это количество предыдущих журналов, которые нужно сохранить, а строка - это путь к каталогу, в котором хранятся журналы (по умолчанию - log).В этой программе я должен проверить, что целочисленный параметр предоставляется и является числом.Если указан второй параметр, убедитесь, что указан путь к каталогу и у меня есть доступ для записи в него.Не беспокойтесь об отдельных файлах журналов, имеющих разрешения на запись.
Вот несколько примеров запуска программы.Строки, начинающиеся с «>», являются ответами программы.
Строки, начинающиеся с «#», не печатаются, а представляют собой описание того, какое действие выполняет программа.
./logrot
> number of days of logs to keep is required to be a non-negative integer
./logrot -3
> number of days of logs to keep is required to be a non-negative integer
./logrot 5 Not_A_Writeable_Directory
> Not_A_Writeable_Directory must be a path to a log directory with write access for $USER
./logrot 1
#moves log/*.0.log to log/*.1.log
#creates new log/*.0.log
#deletes all other .log files
./logrot 2 otherfolder
#moves otherfolder/*.1.log to otherfolder/*.2.log
#moves otherfolder/*.0.log to otherfolder/*.1.log
#creates new otherfolder/*.0.log
#deletes all other .log files
Код моего bash-скрипта:
#!/bin/bash
if [-z "$1"] || ["1" -lt "0"]; then
echo "number of days of logs to keep is required to be a non-negative integer"
exit
else
count="$1"
fi
if [-z "$2"]; then
dir=~/log
else
dir=$2
fi
if [ ! -d "$dir"]: then
#echo "$dir must be a path to a log directory with write access for $USER
#exit
mkdir ~/log
chmod 777 ~/log
touch ~/log/*.0.log
fi
for (( i=$count-1; i>=0; i--))
do
next=$(($i+1))
if [ ! -f "$dir/*.$i.log"]; then
echo "Directory $dir/*.$i.log does not exist"
else
mv $dir/*.$i.log $dir/*.$next.log
echo "moves $dir/*.$i.log to $dir/*.$next.log"
exit
fi
done
touch $dir/*.0.log