shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Ajuda com script - Urgente =/


From: Cristiano Ferrari
Subject: Re: Ajuda com script - Urgente =/
Date: Sun, 14 Dec 2008 12:30:57 -0000
User-agent: eGroups-EW/0.82

--- Em address@hidden, "Lucas Pereira Caixeta"
<lpcnew@...> escreveu
> Pegunta, como eu poderia fzr um programa para pegar dados de um sistema
> sempre da semana anterior??
> tipo, se eu roda-lo segunda ele pega os dados da segunda-sexta passada.
> 
> Terei que fzr um script que jogue a query para execução 1 vez por
semana...

Antes de tudo, termos como "URGENTE", "SOCOOORRO" e assemelhadas
demonstrações de desespero não são bem vindas em listas, fóruns,
grupos de discussão, etc. A idéia destes lugares é a ajuda mútua,
gratuita e baseada na boa vontade. Pedir urgência, quando se pede um
favor, soa, ao mínimo, rude. Urgência se pede quando está se pagando,
e bem.

Além do mais, as melhores cabeças geralmente ignoram posts deste tipo
e, portanto, usá-los acaba sempre tendo efeito contrário.

Voltando ao seu problema, vamos por partes.

Para rodar o script "eternamente" uma vez por semana, basta agendá-lo
no cron, incluíndo uma referência à sua execução no arquivo
/etc/crontab. O layout do arquivo é praticamente auto-explicativo, mas
se tiver dúvidas, leia o man page.

Para pegar os dados da semana você pode, antes de rodar a query, criar
variáveis de definam a data de início e fim do período de referência. 

Já que o script será executado sempre no mesmo dia da semana, você
sempre estará a uma quantidade de dias constante distante dos dias que
representam o início e o fim da semana. Por exemplo, se sua semana vai
de segunda a sexta, e o script roda toda segunda, no dia da execução
você estará a 3 dias do fim da semana anterior (a sexta) e a 7 dias do
início daquela semana (a segunda passada). 

Então, nesta situação, basta que ao definir as variáveis você retroaja
7 dias na data do sistema para a data de início do período de
referência da query e 3 dias do seu final.

O próprio Júlio que você sitou postou em 2004 dois scripts para
converter datas em números seriais e números seriais em datas, que
permitem você fazer contas com elas facilmente em shell.

O link está aqui:
http://br.groups.yahoo.com/group/shell-script/message/10530?viscount=100

Mas, como você se declarou newbie (e não há nada de errado nisso),
talvez tenha alguma dificuldade em compreender a lógica dos scripts.

Para resolver de imediato seu problema (recomendo você a não se
acomodar e desistir de compreender os scripts do Júlio) você pode
recorrer a uma solução mais simples, que é usar o comando date e a
opção -d, que permite você receber uma data que não seja a corrente do
sistema.

Por exemplo, 

date -d '-3 days' 

e

date -d '-7 days'

irão te ajudar a definir com facilidade as datas de início e fim.

Você precisará ainda informar ao date a máscara correta a retornar a
data, de acordo com o formato exigido pelo seu banco de dados (ano com
2 dígitos ou com 4, dia/mês ou mês/dia, etc...).

Feito isso, é só montar passar a query para o binário que a executa,
com as variáveis no lugar dos parâmetros das datas, que o shell se
encarrega de fazer a expansão e substituí-la pelo conteúdo correto.

Abraço


Cristiano



reply via email to

[Prev in Thread] Current Thread [Next in Thread]