você está aqui: Home → Colunistas → Cantinho do Shell
Por Rubens Queiroz de Almeida
Data de Publicação: 22 de Dezembro de 2006
O script de hoje é baseado na idéia do primeiro artigo da coluna *Cantinho do Shell*, chamado Mala direta por email
Este script foi desenvolvido para uso na Web (cgi).
Nós temos um banco de dados no formato texto, onde os campos são separados pelo caractere ":".
Em nosso exemplo de testes utilizamos os seguintes dados:
Rubens Queiroz de Almeida:queiroz@dicas-l.com.br:99876543:Campinas:SP Maria Auxiliadora Neves:maria@example.com.br:98987676:Jundiaí:SP José Expedito Silva:ze@example.com.br:88887777:Boa Esperança:MG Marcone Ferraz:ferraz@example.com.br:77775454:Porto Alegre:RS
O script oferece um campo de busca, onde podemos digitar um ou mais caracteres. A busca é feita com o comando egrep. As linhas do banco de dados que contiverem os campos pesquisados são então formatadas para apresentarem os resultados no seguinte formato:
Nome: José Expedito Silva Email: ze@example.com.br Telefone: 88887777 Cidade: Boa Esperança
O campo email é um link com o formato mailto, para que se possa enviar uma mensagem para a pessoa clicando-se em seu endereço eletrônico.
Para ver como o script funciona, você pode utilizar o script de demonstração disponpivel no site da Dicas-L.
A seguir, o script com comentários:
#!/bin/sh
# Definição dos programas e arquivos de dados utilizados
GREP=/bin/egrep
SED=/bin/sed
DB=/var/www/cgi-bin/fonebook.dat
# Todo script cgi deve se iniciar pelas duas linhas que seguem
echo Content-type: text/html
echo
# A seguir fazemos um teste para verificar se o comando
# grep existe e, caso exista, verificamos se foi passado
# um número de argumentos ao programa que seja diferente
# de zero. Fazemos também uma formatação da página com
# diretivas HTML. É muito importante prestar atenção no uso
# das aspas duplas ("). Se não foi dado nenhum argumento
# de pesquisa, é exibida a página contendo o campo de busca
# (primeira parte do segundo if). Caso contrário, é realizada
# a consulta e os resultados, se houverem, são exibidos.
if [ -x $GREP ]; then
if [ $# = 0 ]; then
echo "
<H1 style=\"text-align:center\">Consulta ao Cadastro Telefônico</H1>
<TABLE ALIGN=CENTER BORDER=0 CELLSPACING=0 CELLPADDING=0 COLS=2 WIDTH=800>
<TR><TD>
<CENTER> </CENTER>
<ISINDEX prompt=\"Forneça argumento para busca: \">
<CENTER>
<P>Após fornecido o argumento de busca, pressione a tecla <B>
<ENTER></B> ou <B><RETURN></B>.
<BR>
</CENTER>
<TR><TD>
</TABLE>"
else
echo "
<TITLE>Resultado da Busca</TITLE>
<CENTER>
<H1>Resultado da Busca para: $*</H1>
</CENTER>
<UL>"
# Atribuímos à variável busca todos os valores fornecidos
# pelo usuário e formatamos substituindo os espaços em
# branco pelo caractere "|" para submeter estes dados ao
# comendo grep
busca=`echo $*|sed 's/ /|/'g`
$GREP -i -w "$busca" $DB > /tmp/fonebook.$$
# A seguir, fazemos um teste para verificar se o arquivo
# com os resultados existe e é diferente de zero. Se for
# igual a zero não obtivemos sucesso na busca e o usuário
# deve ser notificado.
if [ -s /tmp/fonebook.$$ ]; then
# O nosso banco de dados no formato texto usa como separador
# dois pontos ":". Precisamos informar esta fato através
# da variável IFS (INPUT FIELD SEPARATOR).
IFS=":"
while read nome email celular cidade estado
do
echo "<LI><B>Nome</B>: $nome</A>
<BR><B>Email</B>: <A HREF=mailto:$email</A>$email</A>
<BR><B>Telefone</B>: $celular<BR>
<B>Cidade</B>: $cidade
<HR COLOR=RED NOSHADE>"
done < /tmp/fonebook.$$
echo "</UL>"
else
echo "<P>Sua busca não gerou resultados<BR>
<A HREF=/cgi-bin/fonebook.cgi>Realizar nova busca</a>"
fi
echo "
<P><FONT SIZE=-1><A HREF=#TOP>De volta ao topo desta página</A>
</BODY>
</HTML>"
fi
else
echo "Aconteceu um problema na busca... "
fi