Сравнение переменной с числом - PullRequest
0 голосов
/ 14 мая 2018

Следующий код выдает ошибку, и я понятия не имею, почему это происходит.

#! /bin/bash

# This script checks if your Apache log is older than two weeks.
# If so, the files will be deleted

# Defining savepath
savePath="/var/log/test.log"

# Startup
printf "\n*** Starting logrotate at $(date +'%m-%d-%y %H:%M:%S') ***" >> $savePath

# Check if Apache logs older than two weeks are existing
apacheCount=`sudo /usr/bin/find /var/log/apache2/ -iname "access.log.*.gz" -mtime +15 | wc -l`

# If so, delete 'em!
if [ "$apacheCount" != "0" ]; then

    sudo /usr/bin/find /var/log/apache2/ -iname "access.log.*.gz" -mtime +8 -exec rm -f {} \;
    newValue=sudo /usr/bin/find /var/log/apache2/ -iname "access.log.*.gz" -mtime +15 | wc -l

    if [ "$newValue" == "0" ]; then
            printf "\n$(date +'%m-%d-%y %H:%M:%S'): $apacheCount Apache Log(s) has / have been deleted." >> $savePath
    else
            printf "\n$(date +'%m-%d-%y %H:%M:%S'): There was an error. $(($apacheCount-$newValue)) items were not deleted." >> $savePath
    fi
else
    printf "\n$(date +'%m-%d-%y %H:%M:%S'): No Apache Log older than two weeks found." >> $savePath
fi

При запуске программы выдается следующая ошибка:

[: неожиданный оператор

арифметическое выражение: ожидается первичное: "1 -"

Я относительно новичок в bash, поэтому я был бы признателен, если бы вы могли объяснить, где я ошибся.

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Привет, в вашем скрипте вы ошибочно фиксируете значение в newValue.Измените ниже две строки в вашем коде, чтобы устранить проблему: -

#better use below syntax
apacheCount=$(sudo /usr/bin/find /var/log/apache2/ -iname "access.log.*.gz" -mtime +15 | wc -l)


newValue=$(sudo /usr/bin/find /var/log/apache2/ -iname "access.log.*.gz" -mtime +15 | wc -l)
0 голосов
/ 14 мая 2018

В строке ниже произошла ошибка, `` добавлено

newValue=`sudo /usr/bin/find /var/log/apache2/ -iname "access.log.*.gz" -mtime +15 | wc -l`

Улучшенный код:

#! /bin/bash

# This script checks if your Apache log is older than two weeks.
# If so, the files will be deleted

# Defining savepath
savePath="/var/log/test.log"

# Startup
printf "\n*** Starting logrotate at $(date +'%m-%d-%y %H:%M:%S') ***" >> $savePath

# Check if Apache logs older than two weeks are existing
apacheCount=`sudo /usr/bin/find /var/log/apache2/ -iname "access.log.*.gz" -mtime +15 | wc -l`

# If so, delete 'em!
if [ "$apacheCount" != "0" ]; then

   sudo /usr/bin/find /var/log/apache2/ -iname "access.log.*.gz" -mtime +8 -exec rm -f {} \;
   #the line below had an error, `` added
   newValue=`sudo /usr/bin/find /var/log/apache2/ -iname "access.log.*.gz" -mtime +15 | wc -l`

   if [ "$newValue" == "0" ]; then
        printf "\n$(date +'%m-%d-%y %H:%M:%S'): $apacheCount Apache Log(s) has / have been deleted." >> $savePath
   else
        printf "\n$(date +'%m-%d-%y %H:%M:%S'): There was an error. $(($apacheCount-$newValue)) items were not deleted." >> $savePath
   fi
else
   printf "\n$(date +'%m-%d-%y %H:%M:%S'): No Apache Log older than two weeks found." >> $savePath
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...