paulo1205
(usa Ubuntu)
Enviado em 05/03/2015 - 09:48h
danilsonjr escreveu:
Com pequenas modificações funcionou perfeitamente aqui...
if [ "$(date '+%A')" = "sunday" ]; then
if [ $(date '+%d') -ge 15 -a $(date '+%d') -le 21 ]; then
echo "É o terceiro Domingo do mês"
fi
fi
OBS: tem que verificar o retorno do comando
date '+%A' para colocar a string de verificação corretamente, exemplo: o meu retorna em portugês
domingo .
Se é uma tarefa rotineira, pode usar a cron também:
00 00 15-21 * 0 comando/script
vai rodar todos os meses, a meia noite, no domingo, entre os dias 15 e 21, ou seja, terceiro domingo do mês
Com relação ao uso com o cron, essa é de fato a melhor solução. Eu só tenho uma ressalva com relação à meia-noite, porque o horário de verão brasileiro costuma começar justamente na meia-noite do terceiro domingo de outubro, e eu não sei como o cron se comporta no momento do salto (nos EUA o salto costuma ser às 02:00). Geralmente, eu prefiro agendar as coisas para rodar lá para umas quatro ou cinco da manhã (nem de 00:00 a 01:00, por causa do Brasil, nem de 02:00 a 03:00, por causa dos EUA), justamente para evitar surpresas. Raciocínio análogo existe para o fim do horário de verão, em que horas como 23:xx:xx (no Brasil, nos EUA seria 01:xx:xx) parecem acontecer duas vezes.
No que diz respeito à identificação pelo shell, eu acho melhor fazer numa tacada só (i.e. invocar o comando externo
date só uma vez), e forçando o idioma para algo conhecido (através de variável de ambiente, por exemplo, como
LC_ALL ).
O bloco abaixo funciona com o bash e o ksh (mas não com o sh tradicional): ele cria um
named pipe de entrada (“
<( ...
) ”), associa a outra ponta desse pipe à saída do comando
date que executa com idioma forçado para o padrão do POSIX, identificado como “C“ (o conteúdo dos parênteses que define o
named pipe ), e usa o comando interno do shell
read para definir de uma só vez duas variáveis, uma para o dia da semana e outra para o dia do mês, a partir das colunas separadas por espaços dos dados recebidos da entrada redirecionada do
named pipe criado.
read wday mday < <(LC_ALL=C date "+%a %e")
if [[ "$wday" = "Sun" ]] && (( mday>=15 && mday <=21 )); then
# É o terceiro domingo do mês.
fi