Agenda de Contatos

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

[ Hits: 14.644 ]

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

Remover linhas duplicadas em arquivos

Decodificador base64

Instalação do Python 3.5.1 no Linux

Mostrar conifguração da placa de rede

Instalação de programas no Ubuntu Linux


  

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