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

[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






     




reply via email to

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