Eu tenho um script que é executado todos os dias. Dependendo do dia da semana, ou se amanhã for o último dia do mês, ele moverá os arquivos para locais diferentes. Eu omiti as funções reais.
Variáveis:
TOM=$(TZ=UTC-24 date +%d)
SUNDAY=$(date +%w)
A lógica é a seguinte:
if [ $TOM -eq 1 ]; then
move_files monthly
echo EXEUTING END OF MONTH MOVE AND PURGE, NON-DAILY, NON-END-OF-MONTH
elif [ $SUNDAY -eq 0 ]; then
move_files weekly
echo EXECUTING SUNDAY MOVE AND PURGE, NON-DAILY, NON-END-OF-MONTH
else echo EXECUTING DAILY MOVE AND PURGE NON-SUNDAY, NON-END-OF-MONTH
move_files daily
fi
Tudo é executado corretamente, porém ontem (30 de novembro) não moveu corretamente os arquivos para o monthly
diretório, que faz parte da move_files monthly
função. Testando em outro lugar, isso parece funcionar bem.
O host em que estou executando isso está no UTC.
Reunindo alguns comentários acima, com a data GNU você pode verificar se amanhã é o primeiro dia do mês com:
Se você quiser saber se amanhã é o último dia do mês, você pode fazer da mesma forma:
Seu problema pode estar relacionado ao seu fuso horário local não ser realmente UTC. A melhor maneira de obter um tempo de deslocamento com o GNU
date
é usar sua-d
opção com um argumento descrevendo a data que você gostaria de usar como referência em vez de "agora" (como mostrado na resposta de Andy ). Se você também deseja obter a resposta em UTC do GNUdate
, use sua-u
opção.Sem usar GNU
date
, nabash
versão 4.3+: