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

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