[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Script para extrair dados da semana passada
From: |
Cristiano Ferrari |
Subject: |
Re: Script para extrair dados da semana passada |
Date: |
Sun, 14 Dec 2008 22:39:52 -0000 |
User-agent: |
eGroups-EW/0.82 |
--- Em address@hidden, Lucas Pereira Caixeta
<lpcnew@...> escreveu
>
> Prezados colegas de grupo,
>
> Eu havia mandado ontem um e-mail pedindo uma ajuda para um problema
e, no
> final das contas tive ajuda em 2. No técnico que havia perguntado e
uma dica
> para vida mesmo rs...
> Desculpe ter vindo todo afobado pedindo ajuda "urgente" ao grupo.
Sei que
> todos ajudam de bom grado e sem obrigação... estão mesmo dividindo
> conhecimento, o que é fantástico em um mundo tão individualista como o
> nosso.
>
> O membro MrBiTs me alertou de que deveria ter feito um post com esse
titulo,
> e resolvi fazer para caso alguem mais possa me ajudar.
>
> *Problema:*
> Rodar uma query toda semana de forma automática e essa query irá
pegar os
> dados da semana anterior à corrente.
> *Solução até agora:*
> A que achei mais simples foi mesmo de usar o *date -d "7 days ago"*,
como
> responderam no ultimo email.
>
> Eu ja programei em C... e estou programando em php e java e agora,
enfim,
> também shell rs...
> Estou ainda confuso de onde colocar o *date -d "7 days ago" *de
forma que
> ele se faça necessário (condição necessária) para que o programa rode a
> query...
>
Caríssimo Lucas...
Se você já programou em C e java, shell script será puro lazer para
você. Como o Eri indicou, você primeiro define as variáveis, depois as
usa como parâmetros na própria query, que o shell se encarregada de
expandi-las (expandir = substituir o conteúdo da variável pelo(s)
comando(s) declarado(s) no sub-shell [as crazes ``] e posteriormente o
conteúdo da variável no texto da query onde ela é referenciada).
Mas cuidado. Isso somente funciona se você estiver passando o texto da
query direto no texto do próprio script.
Porém, se dentro do script você chamar o comando em shell que
executará a query à partir de outro arquivo texto, passado este
comoando através de um parâmetro ou redirecionamento de stdin ( < ) a
expansão do shell não funcionará, e sua consulta retornará erro.
Neste caso, você pode usar outro recurso de expansão do shell, que
substitui valores de uma variável. A declaração ${var//texto/novo} tem
o poder trocar um conteúdo por outro ao expandir uma variável.
Como fazer então?
Faça algo assim:
1. Declare as variáveis das datas como se a query fosse ser descrita
no corpo do próprio script. Ex:
DATAINI=`date -d '-7 days' +%m/%D/%Y`
DATAFIM=`date -d '-3 days' +%m/%D/%Y`
2. Crie um arquivo texto com o conteúdo da query e nas condições da
data, ao invés da variável, informe uma referência única para as
datas. Ex:
# cat exemplo.sql
select
data,
nf,
total
from
vendas
where
data='DTINI' and
data='DTFIM'
#
3. No corpo do script declare uma variavel que contenha todo o texto
da query, através da expansão com substituição. Ex:
QUERY0=`cat exemplo.sql`
QUERY1=${"$QUERY0"//DTINI/"$DATAINI"}
QUERY=${"$QUERY1"//DTFIM/"$DATAFIM"}
4. Como você não mencionou o banco de dados que está usando, não sei
qual método de entrada da query que ele suporta via console. Mas você
pode fazê-lo através de um pipe (|) ou de um redirecionamento de stdin
(<), caso ele suporte. Ex:
# echo "$QUERY" | comando_banco
ou
# comando_banco < echo "$QUERY"
5. Porém, se seu banco não suporta entrada da query via pipe ou stdin,
você terá então que gravar o conteúdo da variável, em um arquivo texto
e passá-lo como parâmetro ao binário que a executará. Ex:
# echo "$QUERY" > texto_query_novo.sql
# comando_banco -q texto_query_novo.sql
Claro que há varias maneiras de se chegar ao mesmo objetivo. Os
comandos acima são apenas exemplos ilustrativos.
Já que você está se iniciando em shell script, e começou pelo livro do
Júlio C. Neves, não poderia estar em melhores mãos. Mas vale também
uma olhada no site do Aurélio, que tem uma excelente sessão sobre
shell (http://aurelio.net/shell/), principalmente na parte do canivete
do shelleiro (http://aurelio.net/shell/canivete.html) que é um ótimo
cartão de referências.
Abraço
Cristiano