Agenda telefônica

Publicado por Helio Campos Mello de Andrade 23/10/2006

[ Hits: 7.857 ]

Download telefone.tgz




Esses scripts funcionam como uma agenda de telefones via linha de comando. O programa funciona com 2 scripts que devem ser colocados no diretório "bin" no home do usuário:

~/bin/telefone
~/bin/funcoes.sh

Ao rodar o script pela primeira vez, o mesmo cria uma estrutura de diretórios no home chamada dados.

~/dados/
~/dados/telefones/
~/dados/ajuda/
~/dados/ajuda/telefone

O usuário tem apenas que, no bash, colocar a seguinte linha no arquivo ~/.bashrc:

export PATH=$PATH:~/bin

  



Esconder código-fonte

########################################
#                  arquivo: ~/bin/telefone                                   #
# Desenvolvedor: Helio Campos Mello de Andrade                 #
########################################
#!/bin/bash

source ~/bin/funcoes.sh

function procuraPessoas() {
   local nome=$1;
   lista=`find ${dirTelefones} -name "*$nome*"`;
   echo -e $lista;
}

function listaPessoas() {
   local nomePessoa;
   local dir;
   local tel;
   local nom;
   
   for nom in $lista; do
      nomePessoa=`basename $nom`;
      
      echo -e -n "Nome: ${VERMELHOCLARO}${nomePessoa}${SEMCOR}";
      dir=`echo ${nom} | sed -r "s/${nomePessoa}//g"`;
      echo -n " encontrado em: ${dir}";
      tel=`cat ${nom}`;
      echo -e "   Telefone: ${VERDECLARO}${tel}${SEMCOR}"
   done
   lista=`find ${dirTelefones} -name "*$1*"`;
}

function insereTelefone() {
   local dir=$1;
   local nome="";
   local tipo="";
   local telefone="";
   local nomeArquivo="";
   
   echo "Dir Atual: ${novoDir}";

   echo -n "Digite o nome da pessoa: ";
   read nome;
   
   echo -n "Digite o tipo de telefone: ";
   read tipo;
   
   echo -n "Digite o numero do telefone: ";
   read telefone;
   
   echo "Inserindo Telefone [${telefone}] pertencente à [${nome}] no diretório [${dir}] "
   nomeArquivo=`echo -n ${nome} | tr -d ' '`;
   nomeArquivo=`echo -n ${tipo}${nomeArquivo} | tr -d ' '`;
   echo "${telefone}" > ${dir}/${nomeArquivo};
}

function insereNovoDir() {
   local dirAtual=$1;
   local nomeDir="";
   echo "Digite o nome do novo diretório: ";
   read nomeDir;
   
   mkdir ${dirAtual}/${nomeDir};
   buscaDiretorio ${dirAtual}/${nomeDir};
}

function buscaDiretorio() {
   local dirAtual=$1;
   local dirNovo="";
   local listaDir="";
   local linha="";
   local localidade="";

   echo "Dir atual é: ${dirAtual}";

   echo "Agora vc deverá escolher de que local a pessoa é:";
   listaDir=`ls -ltr ${dirAtual} | egrep "^d" | sed -r 's/[^:]+:[0-9]{2} //g'`;
   echo "      atual";
   echo "      novo";
   for lista in ${listaDir}; do
      echo "      $lista";
   done
   echo -n "De onde é a pessoa?: ";
   read localidade;
   
   localidade=`echo -n ${localidade} | tr -d '\n'`;
   dirNovo="${dirAtual}/${localidade}";
   
   echo "dirAtual: $dirAtual"
   echo  "dirNovo: $dirNovo"
   case $localidade in
      "atual" )   insereTelefone   ${dirAtual}; exit;;
      "novo"   )   insereNovoDir   ${dirAtual}; exit;;
      *      )   buscaDiretorio    ${dirNovo}; exit;;
   esac
}

# Criando diretorios iniciais.
if [ ! -d ${dirDados} ]; then
   echo "Criando diretorio [${dirDados}]."
   mkdir ${dirDados};
fi

if [ ! -d ${dirTelefones} ]; then
   echo "Criando diretorio [${dirTelefones}]."
   mkdir ${dirTelefones};
fi

if [ ! -d ${dirAjuda} ]; then
   echo "Criando ajuda para script... Isso so eh feito da primeira vez.";
   mkdir ${dirAjuda};
   echo " Este programa \ufffd utilizado para procurar o telefone de uma determinada pessoa." > ${dirAjuda}/telefone;
   echo "" >> ${dirAjuda}/telefone;
   echo "        Comando:  telefone [opcoes|<nome>]" >> ${dirAjuda}/telefone;
   echo "" >> ${dirAjuda}/telefone;
   echo "        Opcoes:" >> ${dirAjuda}/telefone;
   echo "                --testa : testa o programa com todos os usu\ufffdrios." >> ${dirAjuda}/telefone;
   echo "                --help  : imprime o help do programa." >> ${dirAjuda}/telefone;
   echo "" >> ${dirAjuda}/telefone;
   echo "        Se o nome foi fornecido: procura pelo telefone da pessoa." >> ${dirAjuda}/telefone;
   echo "        Se o nome n\ufffdo foi fornecido: pede um nome para procurar." >> ${dirAjuda}/telefone;
   echo "" >> ${dirAjuda}/telefone;
fi

# Verificando a opcao escolhida.
case $1 in
   "--testa" )  testaTelefone ; exit;;
   "--help"  )    imprimeHelp ; exit;;
   "insere"  ) buscaDiretorio ${dirTelefones}; exit;;
   *        ) ;;
esac

if [ $# -gt 0 ]; then
   nome=$1;
else
   echo -e -n "Digite o nome da pessoa: ${AZULESCURO}";
   read nome;
   echo -e "${SEMCOR}"
fi

echo -e "Procurando: ${AZULESCURO}$nome${SEMCOR}"
insereDiretorios;
procuraPessoas $nome;
listaPessoas  $lista;
########################################
#             fim do arquivo: ~/bin/telefone                              #
########################################

########################################
#                  arquivo: ~/bin/funcoes.sh                                #
# Desenvolvedor: Helio Campos Mello de Andrade                 #
########################################
#!/bin/bash

function buscaNomesArquivos() {
   dirBusca=$1;
#   tipo=$2;
   echo -e "${VERMELHOCLARO}$dirBusca $tipo${SEMCOR}";
   return `find $dirBusca | grep -i $tipo`;
}

function imprimeHelp() {
   local nome=`basename $0`;
   echo -e "Imprimindo: $0";
   fold -80 "${dirAjuda}/$nome"
}

function testaTelefone() {
   local nomes;
   local nome;
   echo -e "Testando o programa telefone";
   nomes=`find ${dirTelefones} -ls | egrep -v "^[ ]?[0-9]{1,}[ ]{1,}[0-9][ ]d" | awk '{ print($11); }'`;
   for nome in ${nomes}; do
      echo -e ${nome};
      nome=`basename ${nome}`;
   done
}

function insereDiretorios() {
   dirHome="${HOME}";
   dirBase=${PWD};
   dirDados="${dirHome}/dados";
   dirTelefones="${dirDados}/telefones";
   dirBin="${dirHome}/bin";
   dirAjuda="${dirDados}/ajuda";
}

function subString() {
   string=$1;
   inicial=$2;
   tamanho=$3;
   return `echo $string | awk "{ string=substr($0, '$inicial', '$tamanho'); printf( string ); }"`;
}

function insereCores() {
   vermelhoClaro='\e[0;31m';
   vermelhoEscuro='\e[1;31m';
   VERMELHOCLARO='\e[0;31m';
   VERMELHOESCURO='\e[1;31m';
   azulClaro='\e[0;34m';
   azulEscuro='\e[1;34m';
   AZULCLARO='\e[0;34m';
   AZULESCURO='\e[1;34m';
   cyanClaro='\e[0;36m';
   cyanEscuro='\e[1;36m';
   CYANCLARO='\e[0;36m';
   CYANESCURO='\e[1;36m';
   verdeClaro='\e[0;32m';
   verdeEscuro='\e[1;32m';
   VERDECLARO='\e[0;32m';
   VERDEESCURO='\e[1;32m';
   semcor='\e[0m';
   SEMCOR='\e[0m';
   preto='\e[0;30m';
   PRETO='\e[0;30m';
   cinzaClaro='\e[0;37m';
   CINZACLARO='\e[0;37m';
   cinzaEscuro='\e[0;30m';
   CINZAESCURO='\e[0;30m';
   purpuraClaro='\e[1;35m';
   PURPURACLARO='\e[1;35m';
   purpuraEscuro='\e[0;35m';
   PURPURAESCURO='\e[0;35m';
   marrom='\e[0;33m';
   amarelo='\e[1;33m';
   branco='\e[1;37m';
   BRANCO='\e[1;37m';

   corVermelhoClaro='\\\e[0;31m';
   corVermelhoEscuro='\\\e[1;31m';
   CORVERMELHOCLARO='\\\e[0;31m';
   CORVERMELHOESCURO='\\\e[1;31m';
   corAzulClaro='\\\e[0;34m';
   corAzulEscuro='\\\e[1;34m';
   CORAZULCLARO='\\\e[0;34m';
   CORAZULESCURO='\\\e[1;34m';
   corCyanClaro='\\\e[0;36m';
   corCyanEscuro='\\\e[1;36m';
   CORCYANCLARO='\\\e[0;36m';
   CORCYANESCURO='\\\e[1;36m';
   corVerdeClaro='\\\e[0;32m';
   corVerdeEscuro='\\\e[1;32m';
   CORVERDECLARO='\\\e[0;32m';
   CORVERDEESCURO='\\\e[1;32m';
   corSemCor='\\\e[0m';
   CORSEMCOR='\\\e[0m';
   corPreto='\\\e[0;30m';
   CORPRETO='\\\e[0;30m';
   corCinzaClaro='\\\e[0;37m';
   CORCINZACLARO='\\\e[0;37m';
   corCinzaEscuro='\\\e[1;30m';
   CORCINZAESCURO='\\\e[1;30m';
   corPurpuraClaro='\\\e[1;35m';
   CORPURPURACLARO='\\\e[1;35m';
   corPurpuraEscuro='\\\e[0;35m';
   CORPURPURAESCURO='\\\e[0;35m';
   corMarrom='\\\e[0;33m';
   corAmarelo='\\\e[1;33m';
   corbranco='\\\e[1;37m';
   CORBRANCO='\\\e[1;37m';
}

function imprimeLinha() {
   linha=$1;
   corTeste='${AZUL}';
   cor=`${dirBin}/testaExp "${linha}" "${corTeste}"`;
   corTeste='${SEMCOR}';
   semCor=`${dirBin}/testaExp "${linha}" "${corTeste}"`;
   linha=`echo $linha | sed 's/${VERMELHOCLARO}/'${corVermelhoClaro}'/g'`;
   linha=`echo $linha | sed 's/${VERMELHOESCURO}/'${corVermelhoEscuro}'/g'`;
   linha=`echo $linha | sed 's/${AZULCLARO}/'${corAzulClaro}'/g'`;
   linha=`echo $linha | sed 's/${AZULESCURO}/'${corAzulEscuro}'/g'`;
   linha=`echo $linha | sed 's/${CYANCLARO}/'${corCyanClaro}'/g'`;
   linha=`echo $linha | sed 's/${CYANESCURO}/'${corCyanEscuro}'/g'`;
   linha=`echo $linha | sed 's/${VERDECLARO}/'${corVerdeClaro}'/g'`;
   linha=`echo $linha | sed 's/${VERDEESCURO}/'${corVerdeEscuro}'/g'`;
   linha=`echo $linha | sed 's/${SEMCOR}/'${corSemCor}'/g'`;
   linha=`echo $linha | sed 's/${PRETO}/'${corPreto}'/g'`;
   linha=`echo $linha | sed 's/${CINZACLARO}/'${corCinzaClaro}'/g'`;
   linha=`echo $linha | sed 's/${CINZAESCURO}/'${corCinzaEscuro}'/g'`;
   linha=`echo $linha | sed 's/${PURPURACLARO}/'${corPurpuraClaro}'/g'`;
   linha=`echo $linha | sed 's/${PURPURAESCURO}/'${corPurpuraEscuro}'/g'`;
   linha=`echo $linha | sed 's/${MARROM}/'${corMarrom}'/g'`;
   linha=`echo $linha | sed 's/${AMARELO}/'${corAmarelo}'/g'`;
   linha=`echo $linha | sed 's/${BRANCO}/'${corbranco}'/g'`;

   echo -e ${linha};
}

function ajuda() {

   if [ $# -eq 1 ]; then
      help=$1
      comando=`echo "cat ${dirAjuda}/*${help}*"`;
      $comando;
   else
      imprimeHelp;
   fi
}

insereDiretorios;
insereCores;

########################################
#           fim do arquivo: ~/bin/funcoes.sh                             #
########################################

Scripts recomendados

Configuração do horário de verão 2006/2007 (Red Hat, Fedora)

Advix - controle de processos judiciais para advogados

Gerador de senhas aleatórias

TxzSync 1.0 - Fazer Backup dos Pacotes Baixados pelo Slackpkg

Ativa e dasativa o XGL para o KDE


  

Comentários
[1] Comentário enviado por rgsommer em 12/11/2008 - 14:53h

conseguiria isso pra mim? vlw

Programa Agenda feito em Shell Script (Bourne - Again Shell – bash)
que possua as seguintes funcionalidades:
- inserir dados (nome e telefone);
- listar o arquivo ordenado por nome (crescente e decrescente);
- executar procura por nome; e
- executar procura por telefone.
Nas duas últimas funcionalidades, executar procura por nome e executar procura por
telefone, deve ser feita a verificação da existência do nome ou do telefone e, caso não exista, exibir uma mensagem de telefone ou nome inexistente.

[2] Comentário enviado por alaxricard em 06/06/2010 - 09:07h

Amigo este seu Script ele naum esta pegando muito bem naum amigo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts