Respostas:
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand
date +%W
: número da semana do ano com segunda-feira como primeiro dia da semana, hoje semana 39
10#$(date +%W)
: converta o date +W
número em decimal e evite confusão na análise da base do shell
$((39%2))
: operação do módulo: o resultado é 0 (número da semana par) ou 1 (número da semana ímpar), o resultado desta semana é 1, na próxima semana 0
test 1 -eq 1
: teste aritmético (igual), neste caso o resultado é booleano verdadeiro
&& yourCommand
: Booleano AND: executado yourCommand
apenas se o resultado do comando anterior for boolean true
Observe que o ano pode ter duas semanas ímpares: 53 (este ano) e 1 (próximo ano)
0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
$((10#$(date +%W)%2)) -eq 1 && echo OK
minhas tentativas de shell para executar o resultado do cálculo semana: -bash: 1: command not found
. Alguma pista do porquê está fazendo isso? Obrigado.
test
não é usuário, é um comando. Tente:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
O que você mostrou é "toda semana". Então o código é:
0 8 * * 6
Tem certeza de que precisa executá-lo a cada duas semanas?
0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand
echo $?
depois de executar esse comando, para ver seu código de retorno - que é o que é importante com ele