Контакт с датами в ударе

В сценарии удара я хочу проверить, является ли это первый день месяца. Теперь я имею:

if [ $DAY -eq 1 ]; then
        rclone copy /tmp/$MONTH-$YEAR.tar.gz.gpg /server2/archive
fi

и я получаю ошибку:

[: -eq: unary operator expected

Я попробовал много различных синтаксисов от сети, но я не могу успешно выполниться. Какая-либо идея что не так? Сервер Ubuntu 18.04

4
задан 12 November 2019 в 11:30

1 ответ

Bash не предопределяет DAY. Как [1 126] Jos говорит , сообщение об ошибке, которое Вы получаете, совпадает с сообщением, полученным, когда оно опущено в целом:

ek@Kip:~$ [ -eq 1 ]
-bash: [: -eq: unary operator expected

команда date +%d производит текущий день месяца. Если Вы хотите DAY держать то значение, можно использовать:

DAY="$(date +%d)"

, Но можно также просто поместить замена команды в эти [ команда:

if [ "$(date +%d)" -eq 1 ]; then
        rclone copy "/tmp/$MONTH-$YEAR.tar.gz.gpg" /server2/archive
fi

date +%d всегда выводы две цифры, поэтому когда это - первый день месяца, это производит 01, но это не проблема. Арифметически, 01 равно [1 111], и Вы справедливо используете -eq, который выполняет числовое сравнение (в отличие от этого =, который выполняет текстовое сравнение).

Вы заметите, что я имею , включил $(date +%d) в [1 129] двойные кавычки в эти [ команда. Это предотвращает globbing и слово, разделяющее .

Это - хорошая идея всегда для включения расширение параметра ("$DAY"), арифметическое расширение ("$((3 + 4))"), и замена команды ("$(date +%d)" или менее предпочтительная форма `date +%d`) в [1 136] двойные кавычки кроме довольно редкого случая, что Вы на самом деле хотите globbing и разделение слова быть выполненными.

, Если бы Вы записали "$DAY" первоначально, вместо [1 121], затем Вы получили бы эту ошибку от [1 122]:

-bash: [: : integer expression expected

, Что ошибка имеет намного больше смысла.

я также включил Ваш путь, /tmp/$MONTH-$YEAR.tar.gz.gpg, который содержит расширения параметра $MONTH и $YEAR в двойных кавычках.

7
ответ дан 1 December 2019 в 09:12

Другие вопросы по тегам:

Похожие вопросы: