Відповіді:
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand
date +%W: число тижня року з понеділком як перший день тижня, сьогодні тиждень 39
10#$(date +%W): перетворіть у date +Wдесяткове число та уникніть плутанини при розборі базової оболонки
$((39%2)): модульна операція: результат 0 (парне число тижня) або 1 (непарне число тижня), результат цього тижня - 1, наступний тиждень 0
test 1 -eq 1: арифметичний тест (рівний), в цьому випадку результат булевий
&& yourCommand: Boolean AND: запускати yourCommandлише якщо результат попередньої команди був булевим true
Зауважте, що рік може отримати два непарні тижні: 53 (цього року) та 1 (наступного року)
0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
$((10#$(date +%W)%2)) -eq 1 && echo OKмої оболонки намагаються виконати результат обчислення тижня: -bash: 1: command not found. Будь-яка підказка, чому це робить? Дякую.
testнемає користувача це команда ita . Спробуйте:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
Те, що ви показали, - "щотижня". Тоді код:
0 8 * * 6
Ви впевнені, що потрібно запускати його кожні два тижні?
0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand
echo $?після запуску цієї команди, щоб побачити її код повернення - ось що важливо з нею