Agenda em bash e dialog

3
Arquivo: /home/marcelo/barao/2008/posr…ll Script/exercicios/agenda.sh Página 1 de 3 #!/bin/bash # Marcelo Barros de Almeida # [email protected] 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()

description

Exercício mostrando como construir uma agenda em Bash usando dialog

Transcript of Agenda em bash e dialog

Page 1: Agenda em bash e dialog

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

#!/bin/bash# Marcelo Barros de Almeida# [email protected] 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 0touch "$ARQ"sleep 1

fi function op_listar(){

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

} 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

elsebreak

fidone

IFSOLD=$IFSIFS=$'\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()

Page 2: Agenda em bash e dialog

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

elsebreak

fidone

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

elsebreak

fidone

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

return

} function op_apagar(){

IFSOLD=$IFSIFS=$'\n'lista=( $(cat $ARQ) )

op=""n=0for linha in ${lista[*]}do

entrada=$( echo $linha | tr " " "_" )op="$op $n $entrada off "let n=n+1

doneIFS=$IFSOLD

resp=$($DIALOG --stdout --checklist "Marque os nomes que deseja apagar" \

0 0 0 $op)

if [ "$resp" = "" ]then

returnfi

for n in $respdo

idx=$(echo $n | tr -d "\"")

Page 3: Agenda em bash e dialog

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

lista[$idx]=""done

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

IFSOLD=$IFSIFS=$'\n'

for linha in ${lista[*]}do

echo "$linha" >> $TMPdoneIFS=$IFSOLD

mv $ARQ $BKPmv $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