Por que não se repete 3x como é dito para ser feito?

1. Por que não se repete 3x como é dito para ser feito?

Thiago Boeira
tcboeira

(usa Debian)

Enviado em 25/03/2020 - 08:50h

Inicialmente, Bom Dia
Este Script deveria mas não esta repetindo 3x em caso de erro como é dito para ser feito?
Alguem pode me explicar a razão?

#!/bin/bash

NAME () {
echo "Digite seu nome"
echo ""
read NOME
}

NAME

if [ -z $NOME ]
then
echo "Você não digitou seu nome!"
else
echo "Olá" "$NOME"
fi



if [ $NOME != Thiago ]
then
echo "ERRADO"

for i in $(seq 3); do
NAME
if [ $NOME != Thiago ]; then
NAME
break
else
echo "ERRO persiste. Então decide o que fazer?"
break
fi
done



else
echo "Certo"
fi


  


2. Re: Por que não se repete 3x como é dito para ser feito?

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 25/03/2020 - 10:25h

Esse loop "for" aí não faz sentido!

Experimenta assim:
#!/bin/bash

while read -p "Digite seu nome: " NOME
do
case $NOME in
Thiago) echo "Nome correto" ; break ;;
*) echo "Nome ERRADO" ;;
esac
done



3. Re: Por que não se repete 3x como é dito para ser feito?

Thiago Boeira
tcboeira

(usa Debian)

Enviado em 25/03/2020 - 10:33h

Obrigado Ryuk ...
É que faz parte de um conjunto de Scripts... Notei que ele não estava repetindo um número de vezes pedido ...

A sua solução é muito boa... mas preciso que ele tente ao menos + 3 vezes caso de errado. E dando errado bem ai ele parte para seguir a vida, pulando uma etapa/função que tenha na sequencia do Script....

Abração


4. Re: Por que não se repete 3x como é dito para ser feito?

Adriano Siqueira
adrisiq

(usa Linux Mint)

Enviado em 25/03/2020 - 10:53h

O comando seq está errado, você precisa informar o valor de início e de fim:
#!/usr/bin/env bash

function pegarNome() {
local _nome=

while [[ -z "$_nome" ]]; do
read -p "Digite seu nome: " _nome
echo "$_nome"
done
}

_nome=
_tentativas=3

while [[ $_tentativas -gt 0 ]]; do
_nome="$(pegarNome)"

if [[ "$_nome" == "Thiago" ]]; then
break
else
echo "[ E ]: Nome incorreto."
((_tentativas--))
fi
done

if [[ $_tentativas -gt 0 ]]; then
echo "[ I ]: Bem vindo $_nome"
else
echo "[ E ]: Acesso negado."
fi



5. Re: Por que não se repete 3x como é dito para ser feito?

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 25/03/2020 - 18:49h

Vê aí, agora com três tentativas:
#!/bin/bash
n=1
while read -p "Digite seu nome: " NOME
do
case $NOME in
paulo) echo "Nome correto" ; break ;;
*) echo "Nome ERRADO" ;;
esac
if [ $n -lt 3 ]; then
let n++
else
break
fi
done




6. Re: Por que não se repete 3x como é dito para ser feito?

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 25/03/2020 - 19:54h


tcboeira escreveu:

Inicialmente, Bom Dia
Este Script deveria mas não esta repetindo 3x em caso de erro como é dito para ser feito?
Alguem pode me explicar a razão?

#!/bin/bash

NAME () {
echo "Digite seu nome"
echo ""
read NOME
}

NAME

if [ -z $NOME ]
then
echo "Você não digitou seu nome!"
else
echo "Olá" "$NOME"
fi



if [ $NOME != Thiago ]
then
echo "ERRADO"

for i in $(seq 3); do
NAME
if [ $NOME != Thiago ]; then
NAME
break
else
echo "ERRO persiste. Então decide o que fazer?"
break
fi
done



else
echo "Certo"
fi

Segue sugestão:
#!/bin/bash
count=0;

while (($count<3));do
read -p "Digite seu nome: " NOME
if [ "$NOME" = "" ];then echo "Tentativa Nº $count Você não digitou seu nome!"
elif [ "$NOME" != "Thiago" ];then echo "Tentativa Nº $count Errado"
elif [ "$NOME" = "Thiago" ];then echo "Tentativa Nº $count Certo";break
fi
let count++;
done
echo -e "\nTentativas Esgotadas"



______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts