новичок в помощи сценариев Bash, пожалуйста, - PullRequest
1 голос
/ 21 октября 2010

Время от времени я запускаю bash-скрипты на своих серверах, я пытаюсь написать скрипт, который отслеживает папки журналов и сжимает файлы журналов, если папка превышает заданную емкость. Я знаю, что есть лучшие способы сделать то, что я сейчас пытаюсь сделать, ваши предложения более чем приветствуются. Скрипт ниже выдает ошибку «неожиданный конец файла». Ниже мой скрипт.

dir_base=$1   
size_ok=5000000  
cd $dir_base  
curr_size=du -s -D | awk '{print $1}' | sed 's/%//g' zipname=archivedate +%Y%m%d

if (( $curr_size > $size_ok ))
then
    echo "Compressing and archiving files, Logs folder has grown above 5G"
    echo "oldest to newest selected."
    targfiles=( `ls -1rt` )
    echo "rocess files."
    for tfile in ${targfiles[@]}
    do
        let `du -s -D | awk '{print $1}' | sed 's/%//g' | tail -1`
        if [ $curr_size -lt $size_ok ];
        then
            echo "$size_ok has been reached. Stopping processes"
            break
        else  if [ $curr_size -gt $size_ok ];
        then
            zip -r $zipname $tfile
            rm -f $tfile
            echo "Added ' $tfile ' to archive'date +%Y%m%d`'.zip and removed"
        else [ $curr_size -le $size_ok ];
            echo "files in $dir_base are less than 5G, not archiving"
        fi

Ответы [ 3 ]

2 голосов
/ 21 октября 2010

Посмотрите на logrotate.Вот пример использования его.

0 голосов
/ 21 октября 2010

My du -s -D не показывает знак %. Так что вы можете просто сделать.

curr_size=$(du -s -D)
set -- $curr_size
curr_size=$1

экономит вам несколько накладных расходов вместо du -s -D | awk '{print $1}' | sed 's/%//g.

Если он показывает % знак, вы можете избавиться от него, как это du -s -D | awk '{print $1+0}'. Не нужно использовать sed.

Используйте синтаксис $() вместо обратных кавычек, когда это возможно

Для targfiles=( ls -1rt ), вы можете опустить -1. Так может быть targfiles=( $(ls -rt) )

Используйте кавычки вокруг переменных, когда это возможно. например, "$ zipname", "$ tfile"

0 голосов
/ 21 октября 2010

С тем, что вы нам даете, вам не хватает «готово» для завершения цикла for и «fi» для завершения основного if. Пожалуйста, переформатируйте ваш код, и вы получите более точные ответы ...

РЕДАКТИРОВАТЬ:

Глядя на ваш переформатированный скрипт, вы увидите, что «неожиданный конец файла» происходит из-за того, что вы не закрыли ни цикл «for», ни «if»

Поскольку кажется, что вы имитируете поведение logrotate, проверьте его, как подсказывает @Hank ...

my2c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...