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

Recomende este artigo nas redes sociais

 

 

Veja a relação completa dos artigos desta coluna