você está aqui: Home  → Colunistas  →  Cantinho do Shell

 

Catálogo de Telefones via Web

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>&nbsp;</CENTER>
     <ISINDEX prompt=\"Forneça argumento para busca: \">
     <CENTER>
     <P>Após fornecido o argumento de busca, pressione a tecla <B>
        &lt;ENTER></B> ou <B>&lt;RETURN></B>.
     <BR>&nbsp;
     </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
Error: No site found with the domain 's2.dicas-l.com.br' (Learn more)