SlideShare uma empresa Scribd logo
Arquivo: /home/marcelo/barao/2008/posr…ll Script/exercicios/agenda.sh               Página 1 de 3

#!/bin/bash
# Marcelo Barros de Almeida
# marcelobarrosalmeida@gmail.com

DIR="/home/marcelo/.agenda"
BD="agenda.txt"
ARQ="$DIR/$BD"
BKP="$DIR/$BD.bkp"
TMP="$DIR/$BD.tmp"
VER="V0.1"

main_menu=( "Listar" "Pesquisar" "Incluir" "Apagar" "Sair" )
callbacks=( op_listar op_pesquisar op_incluir op_apagar op_sair )

DIALOG=dialog

if [ ! -d "$DIR" ]
then
     $DIALOG --infobox "Criando diretório do repositório ($DIR) ..." 0 0
     mkdir "$DIR"
     sleep 1
fi

if [ ! -f "$ARQ" ]
then
     $DIALOG --infobox "Criando base de dados ($BD) ... " 0 0
     touch "$ARQ"
     sleep 1
fi

function op_listar()
{

    $DIALOG --title "Nome|Telefone" --textbox "$ARQ" 0 0
    return
}

function op_pesquisar()
{
    nome=""
    while [ "$nome" = "" ]
    do
        nome=$( $DIALOG --stdout --inputbox "Nome ou telefone a procurar:" 0 30 )

           [ "$?" = "1" ] && return

           nome=$(echo "$nome" | tr "|" "_" )

           if [ "$nome" = "" ]
           then
                $DIALOG --msgbox "Insira valor válido" 0 0
                continue
           else
                break
           fi
    done

    IFSOLD=$IFS
    IFS=$'n'
    res=$(cat $ARQ | grep $nome)
    IFS=$IFSOLD

    if [ "$res" = "" ]
    then
         $DIALOG --title "Resultados da pesquisa para $nome" 
             --msgbox "Nenhum resultado encontrado." 0 0
    else
         $DIALOG --title "Resultados da pesquisa para $nome" --msgbox "$res" 0 0
    fi
}

function op_incluir()
Arquivo: /home/marcelo/barao/2008/posr…ll Script/exercicios/agenda.sh               Página 2 de 3

{
    nome=""
    while [ "$nome" = "" ]
    do
        nome=$( $DIALOG --stdout --inputbox "Entre o nome:" 0 30 )

           [ "$?" = "1" ] && return

           nome=$(echo "$nome" | tr "|" "_" )

           if [ "$nome" = "" ]
           then
                $DIALOG --msgbox "Insira um nome válido" 0 0
                continue
           else
                break
           fi
    done

    tel=""
    while [ "$tel" = "" ]
    do
        tel=$( $DIALOG --stdout --inputbox "Entre o telefone:" 0 30 )

           [ "$?" = "1" ] && return

           tel=$(echo "$tel" | tr "|" "_" )

           if [ "$tel" = "" ]
           then
                $DIALOG --msgbox "Insira um telefone válido" 0 0
                continue
           else
                break
           fi
    done

    reg="$nome | $tel"
    echo $reg >> $ARQ
    $DIALOG --infobox "Nova entrada adicionada.nNome: $nomenTelefone: $tel" 0 0
    sleep 0.25

    return
}

function op_apagar()
{
    IFSOLD=$IFS
    IFS=$'n'
    lista=( $(cat $ARQ) )

    op=""
    n=0
    for linha in ${lista[*]}
    do
         entrada=$( echo $linha | tr " " "_" )
         op="$op $n $entrada off "
         let n=n+1
    done
    IFS=$IFSOLD

    resp=$($DIALOG --stdout --checklist "Marque os nomes que deseja apagar" 
            0 0 0 $op)

    if [ "$resp" = "" ]
    then
         return
    fi

    for n in $resp
    do
        idx=$(echo $n | tr -d """)
Arquivo: /home/marcelo/barao/2008/posr…ll Script/exercicios/agenda.sh                          Página 3 de 3

              lista[$idx]=""
       done

       [ -f $TMP ] && rm $TMP
       touch $TMP

       IFSOLD=$IFS
       IFS=$'n'

       for linha in ${lista[*]}
       do
            echo "$linha" >> $TMP
       done
       IFS=$IFSOLD

       mv $ARQ $BKP
       mv $TMP $ARQ
}

function main()
{
    while [ : ]
    do
        numops=${#main_menu[@]}
        menu=""
        for i in $(seq 0 $((numops-1)) )
        do
             op=$( echo ${main_menu[$i]} | tr " " "_" )
             menu="$menu $i $op "
        done

              resp=$($DIALOG   --stdout --menu "Agenda telefônica ($VER)" 0   0   0   $menu)

              [ "$?" = "1" ] && exit 1

              ${callbacks[$resp]}
       done

}

function op_sair()
{
    exit 0
}

main

Mais conteúdo relacionado

PDF
Lista de exercícios em Bash (resolvida)
PDF
Shell script
PDF
Soa cap2 exercicios resolvidos shell
PDF
Introdução ao Shell Script (versão estendida)
PDF
12 aula - shell script-2015
PPT
PHP GERAL
PDF
Scatole Nere
ODP
Bash, o poder da linha de comando! - Tchelinux.org 2017
Lista de exercícios em Bash (resolvida)
Shell script
Soa cap2 exercicios resolvidos shell
Introdução ao Shell Script (versão estendida)
12 aula - shell script-2015
PHP GERAL
Scatole Nere
Bash, o poder da linha de comando! - Tchelinux.org 2017

Mais procurados (18)

PDF
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PDF
Alterar password linux user pam autentication
PPTX
programação c 8 9_aula
PPTX
Automatizando tarefas com bash script
PDF
Proxy, Man-In-The-Middle e testes
PDF
A Revolução dos Middlewares
PDF
Python Class
PPT
Sapo sessions linux power tools
PDF
Haskell aula7 libs_intro_arquivos
PPT
O Que é Shell (bash)
PDF
Perl Moderno, dia5
PDF
[SCTI 2011] - CLI: sobrevivendo na linha de comando
PDF
JasperReports
PDF
Perl Moderno, dia4
PDF
Perl Moderno, dia3
PPTX
Shell script i
PDF
Perl Moderno, dia2
PPT
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
Alterar password linux user pam autentication
programação c 8 9_aula
Automatizando tarefas com bash script
Proxy, Man-In-The-Middle e testes
A Revolução dos Middlewares
Python Class
Sapo sessions linux power tools
Haskell aula7 libs_intro_arquivos
O Que é Shell (bash)
Perl Moderno, dia5
[SCTI 2011] - CLI: sobrevivendo na linha de comando
JasperReports
Perl Moderno, dia4
Perl Moderno, dia3
Shell script i
Perl Moderno, dia2
Anúncio

Mais de Marcelo Barros de Almeida (20)

PDF
[9/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
PDF
[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
PDF
[7/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
PDF
[6/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
PDF
[5/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
PDF
[4/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
PDF
[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
PDF
[2/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
ODP
Projeto de Hardware com Microcontroladores STM32
ODP
Criando Placas Eletrônicas com KiCAD (Marcelo Barros)
PDF
Administração de Redes Linux - III
PDF
Administração de Redes Linux - II
PDF
Administração de Redes Linux - I
ODT
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
ODP
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
ODP
Treinamento Qt básico - aula III
ODP
Treinamento Qt básico - aula II
ODP
Treinamento Qt básico - aula I
ODP
Python para desenvolvedores - material apoio (parte I)
ODP
Tutorial sobre iptables
[9/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[7/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[6/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[5/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[4/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[2/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
Projeto de Hardware com Microcontroladores STM32
Criando Placas Eletrônicas com KiCAD (Marcelo Barros)
Administração de Redes Linux - III
Administração de Redes Linux - II
Administração de Redes Linux - I
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
Treinamento Qt básico - aula III
Treinamento Qt básico - aula II
Treinamento Qt básico - aula I
Python para desenvolvedores - material apoio (parte I)
Tutorial sobre iptables
Anúncio

Último (19)

PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Aula 18 - Manipulacao De Arquivos python
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Apple Pippin Uma breve introdução. - David Glotz
Custos e liquidação no SAP Transportation Management, TM130 Col18
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Processos na gestão de transportes, TM100 Col18
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
COBITxITIL-Entenda as diferença em uso governança TI
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Aula04-Academia Heri- Tecnologia Geral 2025
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss

Agenda em bash e dialog

  • 1. Arquivo: /home/marcelo/barao/2008/posr…ll Script/exercicios/agenda.sh Página 1 de 3 #!/bin/bash # Marcelo Barros de Almeida # marcelobarrosalmeida@gmail.com DIR="/home/marcelo/.agenda" BD="agenda.txt" ARQ="$DIR/$BD" BKP="$DIR/$BD.bkp" TMP="$DIR/$BD.tmp" VER="V0.1" main_menu=( "Listar" "Pesquisar" "Incluir" "Apagar" "Sair" ) callbacks=( op_listar op_pesquisar op_incluir op_apagar op_sair ) DIALOG=dialog if [ ! -d "$DIR" ] then $DIALOG --infobox "Criando diretório do repositório ($DIR) ..." 0 0 mkdir "$DIR" sleep 1 fi if [ ! -f "$ARQ" ] then $DIALOG --infobox "Criando base de dados ($BD) ... " 0 0 touch "$ARQ" sleep 1 fi function op_listar() { $DIALOG --title "Nome|Telefone" --textbox "$ARQ" 0 0 return } function op_pesquisar() { nome="" while [ "$nome" = "" ] do nome=$( $DIALOG --stdout --inputbox "Nome ou telefone a procurar:" 0 30 ) [ "$?" = "1" ] && return nome=$(echo "$nome" | tr "|" "_" ) if [ "$nome" = "" ] then $DIALOG --msgbox "Insira valor válido" 0 0 continue else break fi done IFSOLD=$IFS IFS=$'n' res=$(cat $ARQ | grep $nome) IFS=$IFSOLD if [ "$res" = "" ] then $DIALOG --title "Resultados da pesquisa para $nome" --msgbox "Nenhum resultado encontrado." 0 0 else $DIALOG --title "Resultados da pesquisa para $nome" --msgbox "$res" 0 0 fi } function op_incluir()
  • 2. Arquivo: /home/marcelo/barao/2008/posr…ll Script/exercicios/agenda.sh Página 2 de 3 { nome="" while [ "$nome" = "" ] do nome=$( $DIALOG --stdout --inputbox "Entre o nome:" 0 30 ) [ "$?" = "1" ] && return nome=$(echo "$nome" | tr "|" "_" ) if [ "$nome" = "" ] then $DIALOG --msgbox "Insira um nome válido" 0 0 continue else break fi done tel="" while [ "$tel" = "" ] do tel=$( $DIALOG --stdout --inputbox "Entre o telefone:" 0 30 ) [ "$?" = "1" ] && return tel=$(echo "$tel" | tr "|" "_" ) if [ "$tel" = "" ] then $DIALOG --msgbox "Insira um telefone válido" 0 0 continue else break fi done reg="$nome | $tel" echo $reg >> $ARQ $DIALOG --infobox "Nova entrada adicionada.nNome: $nomenTelefone: $tel" 0 0 sleep 0.25 return } function op_apagar() { IFSOLD=$IFS IFS=$'n' lista=( $(cat $ARQ) ) op="" n=0 for linha in ${lista[*]} do entrada=$( echo $linha | tr " " "_" ) op="$op $n $entrada off " let n=n+1 done IFS=$IFSOLD resp=$($DIALOG --stdout --checklist "Marque os nomes que deseja apagar" 0 0 0 $op) if [ "$resp" = "" ] then return fi for n in $resp do idx=$(echo $n | tr -d """)
  • 3. Arquivo: /home/marcelo/barao/2008/posr…ll Script/exercicios/agenda.sh Página 3 de 3 lista[$idx]="" done [ -f $TMP ] && rm $TMP touch $TMP IFSOLD=$IFS IFS=$'n' for linha in ${lista[*]} do echo "$linha" >> $TMP done IFS=$IFSOLD mv $ARQ $BKP mv $TMP $ARQ } function main() { while [ : ] do numops=${#main_menu[@]} menu="" for i in $(seq 0 $((numops-1)) ) do op=$( echo ${main_menu[$i]} | tr " " "_" ) menu="$menu $i $op " done resp=$($DIALOG --stdout --menu "Agenda telefônica ($VER)" 0 0 0 $menu) [ "$?" = "1" ] && exit 1 ${callbacks[$resp]} done } function op_sair() { exit 0 } main