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