Agenda de Contatos
Publicado por Lucas Roberto Xavier de Oliveira 01/11/2007
[ Hits: 8.650 ]
Olá pessoal, segue uma agenda simples porém muito útil.
Espero que gostem!
Abraços.
Lucas Roberto
#!/bin/bash
# arquivos para armazenamento de dados
arquivo=~/.agenda.data
arquivo_antigo=~/.agenda.data.old
#menu
principal () {
echo ""
echo ""
echo " Agenda | Lucas Roberto |"
echo ""
echo ""
echo " selecione a opcao desejada:"
echo ""
echo " a - adicionar contato"
echo " e - editar contato"
echo " d - apagar contato"
echo " l - listar todas as entradas"
echo " p - procurar um contato"
echo " f - apagar tudo"
echo " s - sair"
echo ""
echo " opcao desejada: "
read opt
clear
case $opt in
a) adicionar ;;
e) editar ;;
d) apagar ;;
l) listar ;;
p) procurar ;;
f) formatar ;;
s) 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
clear
principal
}
#apaga um contato
apagar () {
# preste bem atencao a funcao contida abaixo [ 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 a 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 a 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
}
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
}
clear
principal
Melhorando a performance do sistema...
Dialog, script de configuração de rede
Twitter via https pelo terminal
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Instalando partes faltantes do Plasma 6
Adicionar botão "mostrar área de trabalho" no Zorin OS
Como montar um servidor de backup no linux
SQLITE não quer funcionar no LINUX LMDE6 64 com Lazaruz 4.2 64bit (n... (1)
espelhar monitores nao funciona (0)
Pendrive Bootable [RESOLVIDO] (5)
Desenvolvi um programa de hot corner (você colocar o mouse nos cantos)... (3)









