Agenda de Contatos

Publicado por César Blum Silveira 10/11/2004 (última atualização em 11/06/2014)

[ Hits: 14.571 ]

Download contatos.sh

Download 1402362331.contatos.sh (versão 2)




Meu primeiro shell-script, uma agenda de contatos. Vc pode adicionar, apagar, editar e procurar nomes. Armazena nomes, telefones, celulares e e-mails.

  



Versões atualizadas deste script

Versão 2 - Enviado por Vitor Augusto M. Pio em 09/06/2014

Changelog: Alterações:

- Criação do arquivo agenda.data caso ele não exista no começo do programa.
- Mensagem caso não hajam registros.
- Mensagem para cadastro com sucesso.
- Mensagem caso contato não seja encontrado.
- Mensagem contato removido com sucesso.
- Mensagem contato editado com sucesso.
- Mensagem contato não foi encontrado.
- Melhoria em algumas funções (menores).
- Pressione qualquer tecla para retornar ao menu inicial...

Download 1402362331.contatos.sh


Esconder código-fonte

#!/bin/bash

#
# contatos.sh criado por César Blum Silveira
#
# Você pode copiar, distribuir, modificar ou fazer
# o que você quiser com este script.
#
# Dúvidas ou comentarios: cesarbs@brturbo.com 
#

# arquivos que irão armazenar os dados
arquivo=~/.agenda.data
arquivo_antigo=~/.agenda.data.old

# menu
principal () {

   echo ""
   echo ""
   echo "                       Agenda"
   echo ""
   echo ""
   echo "     O que você quer fazer?"
   echo ""
   echo "     a - adicionar contato"
   echo "     e - editar contato"
   echo "     d - apagar contato"
   echo "     l - listar todas as entradas"
   echo "     s - procurar um contato"
   echo "     f - apagar tudo"
   echo "     q - sair"
   echo ""
   echo "          opção: "
   read opt
   clear

   case $opt in
      a) adicionar ;;
      e) editar ;;
      d) apagar ;;
      l) listar ;;
      s) procurar ;;
      f) formatar ;;
      q) clear ;;
      *) principal ;;
   esac
}

# lista as entradas da agenda
listar () {
   cat $arquivo
   read
   clear   
   principal
}

# adiciona um novo contato
adicionar () {
   echo ""
   echo "     Nome: " ; read nome
   echo "     Telefone: " ; read tel
   echo "     Celular: " ; read cel
   echo "     E-mail: " ; read email
   echo "$nome -> Tel: $tel | Cel: $cel | E-mail: $email" >> $arquivo
   clear
   principal
}

# procura por um contato
procurar () {
   echo ""
   echo "     Contato: " ; read pattern
   echo ""
   grep -i $pattern $arquivo
   echo ""
   echo "         Pressione qualquer tecla para retornar ao menu inicial..."
   read
   principal
}

# apaga um contato
apagar () {
   # o raciocionio envolvido nesta funçao é um pouco complicado

   echo ""
   echo "     Contato: "
   read nome

   echo ""
   echo "     Tem certeza que deseja apagar `cat $arquivo | grep -i $nome | cut -d" " -f1`? (s/n)"
   read confirma
   
   if [ $confirma = "s" ]; then
      # atribui à variavel $linha o numeo da linha
      # que contem o nome
      # primeiro lemos o arquivo, separamos o nome
      # com grep e depois cortamos o numero da linha
      linha=`cat $arquivo | grep -in $nome | cut -d: -f1`
   
      # pega o numero da ultima linha do arquivo
      # fazemos o grep imprimir o arquivo com o numero de
      # linhas, damos um tail com a ultima linha
      # da saida do grep e recortamos o numero da linha
      ult_linha=`grep -n "" $arquivo | tail -n1 | cut -d: -f1`
   
      # gera um novo arquivo atualizado
      linhas_antes=`expr $linha - 1`
      linhas_depois=`expr $ult_linha - $linha`
      mv $arquivo $arquivo_antigo
      head -n $linhas_antes $arquivo_antigo > $arquivo
      tail -n $linhas_depois $arquivo_antigo >> $arquivo
   fi
   
   clear
   principal
}

# edita um contato
editar () {
   
   echo ""
   echo "     Contato: "
   read nome

   echo "     Tem certeza que deseja editar `cat $arquivo | grep -i $nome | cut -d" " -f1`? (s/n)"
   read confirma
   
   if [ $confirma = "s" -o $confirma = "S" ]; then
      echo ""
      grep -i $nome $arquivo
      
      echo ""
      echo ""
      echo "     Nome: " ; read novo_nome
      echo "     Telefone: " ; read tel
      echo "     Celular: " ; read cel
      echo "     E-mail: " ; read email
      
      # atribui à variavel $linha o numeo da linha
      # que contem o nome
      # primeiro lemos o arquivo, separamos o nome
      # com grep e depois cortamos o numero da linha
      linha=`cat $arquivo | grep -in $nome | cut -d: -f1`
   
      # pega o numero da ultima linha do arquivo
      # fazemos o grep imprimir o arquivo com o numero de
      # linhas, damos um tail com a ultima linha
      # da saida do grep e recortamos o numero da linha
      ult_linha=`grep -n "" $arquivo | tail -n1 | cut -d: -f1`
   
      # gera um novo arquivo atualizado
      linhas_antes=`expr $linha - 1`
      linhas_depois=`expr $ult_linha - $linha`
      mv $arquivo $arquivo_antigo
      head -n $linhas_antes $arquivo_antigo > $arquivo
      echo "$novo_      nome -> Tel: $tel | Cel: $cel | E-mail: $email" >> $arquivo
      tail -n $linhas_depois $arquivo_antigo >> $arquivo
   fi
   
   clear
   principal
}

# apaga todas as entradas
formatar () {
   echo ""
   echo "Tem certeza que deseja apagar todas as entradas da agenda? (s/n)"
   read confirma
   
   if [ $confirma = "s" -o $confirma = "S" ]; then
      rm $arquivo
      touch $arquivo      
   fi
   
   clear
   principal
}

# início do programa
clear
principal

Scripts recomendados

Unrar

Pegando as informações do usuario

NFS Mounter

Rotina de Vacuum para banco de Dados Postgres

lines.sh


  

Comentários
[1] Comentário enviado por removido em 31/12/2005 - 16:10h

Só um detalhe quano eu mando apagar um contato ela apaga todos.

sniper!

[2] Comentário enviado por patrikbezerra em 28/05/2010 - 11:25h

Muito show este script! Parabéns César!

[3] Comentário enviado por vitinho217 em 10/06/2014 - 11:34h

Muito bom, fiz algumas modificações para melhora do script, espero que ajude !

VIVA O LINUX, VIVA A LIBERDADE !

[4] Comentário enviado por perfection em 19/08/2016 - 16:58h

A Agenda serve como Base para estudar, mas ela não funciona!
Se apagar 1 contato é apagado todos. Ela está Bugada, precisa ser corrigida, pois seu criador não testou e não soube terminá-la!
Outro problema encontrado é que o arquivo não é UTF-8 então para quem usa UTF-8 os acentos serão mostrados incorretamente!

A Versão 2 da Agenda, não fez nenhuma mudança significativa! Tirar os espaços da Tela Inicial ficou péssimo, e as mudanças feitas não acrescentou nada de útil, visto que o mais importante seria a Agenda Funcionar!

Porém mesmo com os Problemas acima mencionados e Informando que a agenda não funciona, Ela realmente serve para ensinar como funciona um Script, e isso ajuda MUITO para quem está iniciando! Nesse sentido eu dou Nota 10 ao César Blum Silveira por sua Iniciativa e interesse em compartilhar seus conhecimentos com a Comunidade!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts