Agenda telefônica
Publicado por Helio Campos Mello de Andrade 23/10/2006
[ Hits: 8.230 ]
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
########################################
#                  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                             #
########################################
ppmtolss16 converte imagens para o formato lss
Script simples para adicionar usuarios do djbdns
TxzSync 1.0 - Fazer Backup dos Pacotes Baixados pelo Slackpkg
Instalar WebCam LG LIC-110 e derivadas
Reiniciar modem via Shell Script
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)
Instalação dualboot Windows 11 e Debian 13 (7)









