Ajuda Com Função Shell Script [RESOLVIDO]

1. Ajuda Com Função Shell Script [RESOLVIDO]

LUIS FERNANDO SUKYS DE OLIVEIRA
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


  


2. MELHOR RESPOSTA

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 09/10/2014 - 19:41h

Amigo , aki no vol tem um lema que nao pode fazer o codigo inteiro , por isso talvez nao publique + o codigo , mas fora isso , de uma olhada no codigo (como sempre , nao estara como vc quer , pq todo mundo é muito exigente , e nao fica grato #SQN)


#!/bin/bash

modificar=0;

reiniciaVariaveis(){
var1="Ok";
var2="Ok";
var3="Ok";
var4="Ok";
}

perguntaUm(){

echo "Pergunta XX";
read resposta1;

if [ "$resposta1" = "XX" ];then
var1="Ok";
if [ $modificar -eq 0 ];then
inicio;
else
fim;
fi
else
echo "Resposta Errada";
perguntaUm;
fi
}

perguntaDois(){

echo "Pergunta YY";
read resposta2;

if [ "$resposta2" = "YY" ];then
var2="Ok";
if [ $modificar -eq 0 ];then
inicio;
else
fim;
fi
else
echo "Resposta Errada";
perguntaDois;
fi
}

perguntaTres(){

echo "Pergunta ZZ";
read resposta3;

if [ "$resposta3" = "ZZ" ];then
var3="Ok";
if [ $modificar -eq 0 ];then
inicio;
else
fim;
fi
else
echo "Resposta Errada";
perguntaTres;
fi
}

perguntaQuatro(){

echo "Pergunta KK";
read resposta4;

if [ "$resposta4" = "KK" ];then
var4="Ok";
if [ $modificar -eq 0 ];then
confirma;
else
fim;
fi
else
echo "Resposta Errada";
perguntaQuatro;
fi
}

confirma () {

a="naoOk";

echo "0- Continua"
echo "1- Resposta 1: $resposta1"
echo "2- Resposta 2: $resposta2"
echo "3- Resposta 3: $resposta3"
echo "4- Resposta 4: $resposta4"
echo "Selecione o numero da resposta que deseja corrigir ou 0 para continuar"
read confirma

while [ $a != "Ok" ];do
case $confirma in

"0"|"00")
a="Ok";
fim;
break;;

"1"|"01")
modificar=1;
reiniciaVariaveis;
var1="naoOk";
inicio;
break;;

"2"|"02")
modificar=1;
reiniciaVariaveis;
var2="naoOk";
inicio;
break;;

"3"|"03")
modificar=1;
reiniciaVariaveis;
var3="naoOk";
inicio;
break;;

"4"|"04")
modificar=1;
reiniciaVariaveis;
var4="naoOk";
inicio;
break;;

*)
clear;
echo "Opcao Invalida!!";
sleep 1;
confirma;
break;;
esac
done
}

fim(){
echo "Deu certo :)"
exit 0;
}


inicio(){

if [ $modificar -eq 1 ];then

if [ "$var1" != "Ok" ] ;then
perguntaUm;
reiniciaVariaveis;
elif [ "$var2" != "Ok" ] ;then
perguntaDois;
reiniciaVariaveis;
elif [ "$var3" != "Ok" ] ;then
perguntaTres;
reiniciaVariaveis;
elif [ "$var1" != "Ok" ] ;then
perguntaQuatro;
reiniciaVariaveis;
fi

fi

if [ "$var1" == "Ok" ]; then
var1="naoOk";
perguntaDois;
elif [ "$var2" == "Ok" ]; then
var2="naoOk";
perguntaTres;
elif [ "$var3" == "Ok" ]; then
var3="naoOk";
perguntaQuatro;
else
perguntaUm;
fi
}
inicio;



Espero ter ajudado

[]'s

T+

3. Re: Ajuda Com Função Shell Script [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 09/10/2014 - 10:42h

Opa amigo , desculpa por nao poder responder agora , onde estou nao tem linux , por isso nao posso testar seu codigo , mas ate umas 11:00 eu respondo novamente.

Se nao se sentir incomodado , peço - lhe que me adicione no skype, meu skype é "thihup" (sem aspas)

NOTA :
Tente tirar os 'export' no inicio do codigo

Fortes []'s

T+


4. Re: Ajuda Com Função Shell Script [RESOLVIDO]

LUIS FERNANDO SUKYS DE OLIVEIRA
sukys

(usa Red Hat)

Enviado em 09/10/2014 - 11:02h

Thihup escreveu:

Opa amigo , desculpa por nao poder responder agora , onde estou nao tem linux , por isso nao posso testar seu codigo , mas ate umas 11:00 eu respondo novamente.

Se nao se sentir incomodado , peço - lhe que me adicione no skype, meu skype é "thihup" (sem aspas)

NOTA :
Tente tirar os 'export' no inicio do codigo

Fortes []'s

T+






Sem problemas, eu espero sim!

Aqui não tenho Skype... E em casa não tenho linux, mexo só aqui na empresa mesmo.. rsrs

Quano ao Export, eu testei sem usar ele. Dai não estava funcionando e coloquei. Mas continuou não funcionando. Como não estava atrapalhando, eu deixei.. rsrs

Bom, aguardo seu retorno!

Obrigado!


5. Re: Ajuda Com Função Shell Script [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 09/10/2014 - 11:58h

Amigo , consegui fazer o que vc quer , mas nao implementei tudo,mas esta funcionando agora :)


#!/bin/bash

# O comando UNSET Nome_da_VAR , libera a variavel da memoria.
# Faça o teste , digite no terminal
# a=50
# echo $a
# unset a
# echo $a

perguntaUm(){

echo "Pergunta XX";
read resposta1;

if [ "$resposta1" = "XX" ];then
var1="Ok";
unset resposta1;
inicio;
else
echo "Resposta Errada";
perguntaUm;
fi
}

perguntaDois(){

echo "Pergunta YY";
read resposta2;

if [ "$resposta2" = "YY" ];then
var2="Ok";
unset resposta2;
perguntaTres;
else
echo "Resposta Errada";
perguntaDois;
fi
}

perguntaTres(){

echo "Pergunta ZZ";
read resposta3;

if [ "$resposta3" = "ZZ" ];then
var3="Ok";
unset resposta3;
perguntaQuatro;
else
echo "Resposta Errada";
perguntaTres;
fi
}

perguntaQuatro(){

echo "Pergunta KK";
read resposta4;

if [ "$resposta4" = "KK" ];then
var4="Ok";
unset resposta4;
fim;
else
echo "Resposta Errada";
perguntaQuatro;
fi
}

inicio(){
if [ "$var1" == "Ok" ]; then
perguntaDois;
elif [ "$var2" == "Ok" ]; then
perguntaTres;
elif [ "$var3" == "Ok" ]; then
perguntaQuatro;
else
perguntaUm;
fi
}
fim(){
echo "Deu certo :)"
}

inicio;



Se ajudei , marque o topico como resolvido e marque a melhor resposta

[]'s

T+



6. Re: Ajuda Com Função Shell Script [RESOLVIDO]

LUIS FERNANDO SUKYS DE OLIVEIRA
sukys

(usa Red Hat)

Enviado em 09/10/2014 - 12:12h

Cara, Entendi sua lógica, mas aí eu não vou ter as respostas... :-/
Após o usuário conferir as respostas, o programa vai guardar em um arquivo txt ("resposta1","resposta2","resposta3", etc.). Essa parte está funcionando então nem me preocupei em adicionar aqui, pra não complicar.
De qualquer modo, se eu fizer o unset dentro do if ainda, não vou ter a resposta no fim do programa para guardá-la...






7. Re: Ajuda Com Função Shell Script [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 09/10/2014 - 12:22h

Entao apenas tire as linhas que tem o unset :)

Eu fiz isso pq tava testando um novo comando,mas nao vi muita utilidade.

Se quiser + alguma coisa , é so falar.

Ja sabe como escrever em um arquivo ?

Ficaria tipo isso :



echo $variavel >> arquivo.txt
# Ou
echo $variavel > arquivo.txt # assim apaga o que tem no arquivo e escreve o valor da variavel



Espero ter ajudado

[]'s

T+



8. Re: Ajuda Com Função Shell Script [RESOLVIDO]

LUIS FERNANDO SUKYS DE OLIVEIRA
sukys

(usa Red Hat)

Enviado em 09/10/2014 - 12:37h

Testei o seu código aqui.
Realmente funciona mas faltou a parte da "conferência" das respostas. Esse é o motivo de eu não chamar a funcão "pergunta03" quando o usuário ermina de responder a "pergunta02".

Então preciso que, depois de responder tudo, ele veja as respostas na tela e, caso deseje mudar só a resposta 02, consiga fazer isso sem ter que depois responder novamente a pergunta 03 e 04 (mesmo pq meu formulário tem mais questões... rsrs)

Daí o motivo se eu sempre que termino uma pergunta ele volta pra funcao inicio e valida com o if se a pergutna está respondida (vaiável setada como "ok". Se estiver ele pula pra proxima. Se não estiver ele vai pra essa função. E junstamente nesse ponto que o programa entra em loop...





9. Re: Ajuda Com Função Shell Script [RESOLVIDO]

LUIS FERNANDO SUKYS DE OLIVEIRA
sukys

(usa Red Hat)

Enviado em 10/10/2014 - 17:19h

Desculpe a demora em responder, só consegui testar agora no final da tarde.
Pelo visto resolveu o problema!

Muito Obrigado, Amigo!

Abraços!


10. Re: Ajuda Com Função Shell Script [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 10/10/2014 - 17:26h

Mais alguma duvida?

[]'s

T+


11. Re: Ajuda Com Função Shell Script [RESOLVIDO]

LUIS FERNANDO SUKYS DE OLIVEIRA
sukys

(usa Red Hat)

Enviado em 13/10/2014 - 08:39h

Por enquanto não!!
Muito obrigado pela atenção!!
Uma ótima semana pra vc!

Abraços!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts