Выполнение задания крона в первый рабочий день месяца

Я пытаюсь выполнить задание в первый рабочий день каждого месяца со следующими crontab записями:

00 07 1-3 * * [ "$(date '+\%a')" == "Mon" ] && echo "Its Monday!"
00 07 1 * * [ "$(date '+\%a')" == "Tue" ] && echo "Its Tuesday!"
00 07 1 * * [ "$(date '+\%a')" == "Wed" ] && echo "Its Wednesday!"
00 07 1 * * [ "$(date '+\%a')" == "Thu" ] && echo "Its Thursday!"
00 07 1 * * [ "$(date '+\%a')" == "Fri" ] && echo "Its Friday!"

Но этим утром я получил следующую ошибку:

/bin/sh: 1: [: Thu: unexpected operator
1
задан 1 December 2016 в 11:39

2 ответа

Проблемой является соединение синтаксиса и подходящих команд в коде, который Вы используете, а не путь эти cron был настроен. Поскольку, чего Вы пытаетесь достигнуть, код удара должен действительно использовать if оператор, как это:

if [[ "$(date '+\%a')" == "\Thu" ]]; then echo "Its Thursday!"; fi

(Отмечают дополнительный набор квадратных скобок, использование точки с запятой и завершение fi запись).

, результат которого похож на это:

chris@loki:/$ if [[ "$(date '+\%a')" == "\Thu" ]]; then echo "Its Thursday!"; fi
Its Thursday!

стоит отметить, что в Вашем коде, булевская переменная && не подходит, поскольку это, как действительно предполагается, используется для строкового представления условных операторов. Например:

if [ $condition1 ] && [ $condition2 ]

Hope это - то, чем Вы были после!

0
ответ дан 8 December 2019 в 07:34

От man test:

   STRING1 = STRING2
          the strings are equal

Примечание, что это =, не ==. Однако это не единственная проблема...

firas@itsuki ~ % sh
$ [ "$(date '+\%a')" == "Thu" ] && echo "Its Thursday!"
sh: 1: [: \Thu: unexpected operator
$ [ "$(date '+\%a')" = "Thu" ] && echo "Its Thursday!"
$

другая проблема состоит в том, что начиная с Вашего date строка +\%a между единственная кавычки, она будет интерпретироваться буквально, и таким образом

$ date '+\%a'
\Thu

, который не является тем, что Вы хотите. Вместо этого необходимо удалить ненужную обратную косую черту, и затем

$ [ "$(date '+%a')" = "Thu" ] && echo "Its Thursday!"
Its Thursday!
0
ответ дан 8 December 2019 в 07:34

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

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