Problemas para sair do loop While [RESOLVIDO]

1. Problemas para sair do loop While [RESOLVIDO]

Leonardo Silva
luftf

(usa Ubuntu)

Enviado em 21/10/2015 - 14:11h

Olá meu amigos,

Bom estou começando com Shell Script e me deparei com um problema, não consigo sair de um loop while.

Meu código está assim:



#!/bin/bash

echo -n "informe uma senha: ";
read pass;

echo -n "Informe a senha novamente: ";
read reps;

if [ pass != reps ];
then
while [ pass != reps ];
do
echo "Senhas diferentes, tente novamente...";
echo -n "Informe a senha: ";
read pass;
echo -n "Informe a senha novamente: ";
read reps;
if [ pass = reps ];
then
break;
fi;
else
echo "Senhas Iguais";
fi;



O meu problema é que quando cai no erro e eu digito as senhas iguais o código ignora o meu if e volta para o loop, alguém pode dar uma luz e me explicar o por quê do erro?

Obs: No código final vai ter o numero de tentativas, porque se não vai ficar em loop infinito até o cara digitar a senha corretamente, no momento só queria aprender a sair do while com o If. XD

Abraço.


  


2. MELHOR RESPOSTA

Daniel Hilst Selli
danielhilst

(usa Arch Linux)

Enviado em 21/10/2015 - 14:39h

Amigo, seu script tem varios erros:
- Faltou o "done" fechando o while
- Faltou o "$" na condicional dos ifs para expandir as variaveis
- O fi fechando o if estava antes do else.

Deveria ficar assim:
#!/bin/bash

echo -n "informe uma senha: ";
read pass;

echo -n "Informe a senha novamente: ";
read reps;

if [ $pass != $reps ];
then
while [ $pass != $reps ];
do
echo "Senhas diferentes, tente novamente...";
echo -n "Informe a senha: ";
read pass;
echo -n "Informe a senha novamente: ";
read reps;
if [ $pass = $reps ];
then
echo "OK"
break;
fi
done
fi;


As dicas que eu posso dar pra vc são,
1. Vc pode usar "#!/bin/bash -x" pra executar um script em "modo debug". Assim você ve todos os comandos que estão sendo executados, expansoes de variaveis etc.
2. Vc pode usar "#!/bin/bash -u". Isso vai fazer com que o shell saia com erro quando uma variavel for expandida para vazio. Isso é util pra previnir erros de digitação, por exemplo: "VARIABLE=FOO; echo $VARIABEL " vai estourar um erro em vez de mostrar uma linha em branco...
3. Vc pode usar "read -s" pra ler variaveis sem ecoar o que o usuario digita o terminal, isso é util pra ler passwords.


Att,

3. Ajuda no código!

Leonardo Silva
luftf

(usa Ubuntu)

Enviado em 21/10/2015 - 15:30h


Amigo, seu script tem varios erros:
- Faltou o "done" fechando o while
- Faltou o "$" na condicional dos ifs para expandir as variaveis
- O fi fechando o if estava antes do else.


- Sobre o "done" é que na verdade na hora de por o código aqui eu acabei não digitando por falta de atenção e pressa! :/
- Sobre o "$" só pude perceber o erro por causa do seu comentário mesmo.
- Mas o comentário " O fi fechando o if estava antes do else", não entendi.


1. Vc pode usar "#!/bin/bash -x" pra executar um script em "modo debug". Assim você ve todos os comandos que estão sendo executados, expansoes de variaveis etc.
2. Vc pode usar "#!/bin/bash -u". Isso vai fazer com que o shell saia com erro quando uma variavel for expandida para vazio. Isso é util pra previnir erros de digitação, por exemplo: "VARIABLE=FOO; echo $VARIABEL " vai estourar um erro em vez de mostrar uma linha em branco...
3. Vc pode usar "read -s" pra ler variaveis sem ecoar o que o usuario digita o terminal, isso é util pra ler passwords.


Valeu pelas dicas, vou tentar tudo mais tarde.

Abração.




4. Re: Problemas para sair do loop While

Daniel Hilst Selli
danielhilst

(usa Arch Linux)

Enviado em 21/10/2015 - 15:33h

Ahh eu vi agora sobre o else, eu me confundi e acabei removendo o else :) pode ignorar o comentario do else.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts