sukys
(usa Red Hat)
Enviado em 09/10/2014 - 08:18h
Olá!
Sou iniciante em programação SHELL e estou com um problema ao criar uma função.
Estou criando um formulário para uma pesquisa e preciso que o usuário possa verificar e corrigir as respostas, se necessário.
Pensei em fazer por funções, onde cada pergunta seria uma função, seja ela atraés de seleção ou inserção de texto.
Montei todas as funções e, se eu chamar uma depois da outra (ou se eu colocar o comendo da próxima função a ser chamada ao terminar o que o usuário preencheu) o sistema funciona corretamente.
Porém para fazer a conferência e poder efetuar uma possivel correção sem precisar mexer nas outras respostas, pensei em fazer uma função que chama as funções de pergunta e vai passando uma a uma, conforme elas são respondidas (chamei ela de fn_inicio). Conforme as perguntas são respondidas, uma variável é preenchda e essa função iniio verifica e passa pra próxima pergunta.
O meu problema é o seguinte: No programa que fiz, na segunda pergunta a variável para verificar se a função é preenchida corretamente mas o programa entra em loop, e fica sempre entrando na segunda função, não vai pra próxima.
Acredito que seja alguma coisa no IF da 'fn_inicio' que fiz, pois a funçao da pergunta preenche a variável corretamente.
Alguém poderia me ajudar em como solucionar o problema ou sugerir alguma forma melhor de fazer isso?
Obrigado!
#!/bin/bash
:
export retSel01=""
export retSel02=""
export retSel03=""
export retSel04=""
fn_sel01 (){
echo "pergunta XX"
read resp1
if [ "$resp1" = "XX" ]; then
retSel01="ok"
fn_inicio
else
echo "Resposta Errada"
fn_sel01
fi
}
fn_sel02 (){
echo "pergunta YY"
read resp2
if [ "$resp2" = "YY" ]; then
retSel02="ok"
fn_inicio
else
echo "Resposta Errada"
fn_sel02
fi
}
fn_sel03 (){
echo "pergunta ZZ"
read resp3
if [ "$resp3" = "ZZ" ]; then
retSel03="ok"
fn_inicio
else
echo "Resposta Errada"
fn_sel03
fi
}
fn_sel04 (){
echo "pergunta KK"
read resp4
if [ "$resp4" = "KK" ]; then
fn_confirma
else
echo "Resposta Errada"
fn_sel04
fi
}
fn_confirma () {
a=""
echo "0- Continua"
echo "1- Resposta 1: $fn_sel01"
echo "2- Resposta 2: $fn_sel02"
echo "3- Resposta 3: $fn_sel03"
echo "4- Resposta 4: $fn_sel04"
echo "Selecione o numero da resposta que deseja corrigir ou 0 para continuar"
Read confirma
while true $a !="ok"
do
case $confirma in
"0"|"00")
fn_fim;
break;;
"1"|"01")
fn_sel01="";
fn_inicio;
break;;
"2"|"02")
fn_sel02="";
fn_inicio;
break;;
"3"|"03")
fn_sel03="";
fn_inicio;
break;;
"4"|"04")
fn_sel04="";
fn_inicio;
break;;
*)
clear; echo "Opcao Invalida!!";
sleep 1;
fn_confirma;
break;;
esac
done
}
fn_inicio () {
if [ "$retSel01" == "ok" ]; then
fn_sel02
elif [ "$retSel02" == "ok" ]; then
fn_sel03
elif [ "$retSel03" == "ok" ]; then
fn_sel04
else
fn_sel01
fi
}
fn_fim () {
echo "Fim do Script."
}
fn_inicio