Я пытаюсь выполнить задание в первый рабочий день каждого месяца со следующими 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
Проблемой является соединение синтаксиса и подходящих команд в коде, который Вы используете, а не путь эти 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 это - то, чем Вы были после!
От 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!