Dúvida SHell Script

1. Dúvida SHell Script

Antonio jose
antoniojose12

(usa Fedora)

Enviado em 16/05/2018 - 13:54h

boa tarde, eu estou fazendo um programinha pra testa, eu não posso usar um loop, por questões de estudo!
basicamente eu preciso fazer um contador, que se a senha estiver incorreta a variável "valor" é incrementar em +1 e chama novamente o programa;
Eu estou exportando a variável valor, mas não está funcionando, alguma ideia?


export valor="0"
pass="111"

echo "Senha:"
read senha
if [[ "$senha" -eq "$pass" ]]; then
echo "logado"
else
let valor++
echo "Tentativas $valor de 3"
./CHAMANDO_PROGRAMA_NOVAMENTE
fi



  


2. Re: Dúvida SHell Script

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 16/05/2018 - 18:14h

antoniojose12 escreveu:

boa tarde, eu estou fazendo um programinha pra testa, eu não posso usar um loop, por questões de estudo!
basicamente eu preciso fazer um contador, que se a senha estiver incorreta a variável "valor" é incrementar em +1 e chama novamente o programa;
Eu estou exportando a variável valor, mas não está funcionando, alguma ideia?



velho .. uma idéia "sem loop" é vc fazer 2 funções, a 1ª chama a segunda em caso negativo no 'if' e a 2ª chama a 1ª em caso positivo no 'if'

v aí se isso te da alguma idéia

#!/bin/bash

tentativa=0
pass="111"

funct () {
echo "Digite a senha:"
read senha
if [ $senha -eq $pass ]; then
echo "logado"
else
funct1
fi
}

funct1 () {
tentativa=$(( $tentativa + 1 ))
echo "Vc já tentou $tentativa vezes, tentar de novo ??? [s]im [n]ão"
read resp
if [ $resp = "s" ];then
funct
else
exit
fi
}

funct


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



3. Re: Dúvida SHell Script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/05/2018 - 21:13h

antoniojose12 escreveu:

boa tarde, eu estou fazendo um programinha pra testa, eu não posso usar um loop, por questões de estudo!
basicamente eu preciso fazer um contador, que se a senha estiver incorreta a variável "valor" é incrementar em +1 e chama novamente o programa;
Eu estou exportando a variável valor, mas não está funcionando, alguma ideia?


export valor="0"
pass="111"

echo "Senha:"
read senha
if [[ "$senha" -eq "$pass" ]]; then
echo "logado"
else
let valor++
echo "Tentativas $valor de 3"
./CHAMANDO_PROGRAMA_NOVAMENTE
fi


Boa noite Antonio.
Segue sugestão:
#!/bin/bash
tput clear
pass=0000 ; count=0
CV="\x1B[0;38;5;196m"
CVD="\x1B[0;38;5;2m"
FC="\x1B[m"

PEGA_SENHA() {
if (($count < 3));then
let count++ ; echo -e "\n${CVD} Tentativas: ${count}/3:${FC}" ; read -p " Digite a Senha: " -n4 senha
[[ "$senha" = "$pass" ]] && echo -e "\n${CVD} Logado na ${count}ª tentativa${FC}\n" || { echo -e "\n${CV} Senha ERRADA${FC}" ; PEGA_SENHA ; }
else
echo -e "${CV} Número de tentativas esgotado\n ${FC}" ; exit
fi
}

PEGA_SENHA


marcelo oliver



4. Re: Dúvida SHell Script

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 27/05/2018 - 22:45h

msoliver escreveu:

Boa noite Antonio.
Segue sugestão:
#!/bin/bash
tput clear
pass=0000 ; count=0
CV="\x1B[0;38;5;196m"
CVD="\x1B[0;38;5;2m"
FC="\x1B[m"

PEGA_SENHA() {
if (($count < 3));then
let count++ ; echo -e "\n${CVD} Tentativas: ${count}/3:${FC}" ; read -p " Digite a Senha: " -n4 senha
[[ "$senha" = "$pass" ]] && echo -e "\n${CVD} Logado na ${count}ª tentativa${FC}\n" || { echo -e "\n${CV} Senha ERRADA${FC}" ; PEGA_SENHA ; }
else
echo -e "${CV} Número de tentativas esgotado\n ${FC}" ; exit
fi
}

PEGA_SENHA


marcelo oliver


Marcelão ... me explica uma parada ... se no seu script só existe 1 função, qual a finalidade de faze-la ? não seria mais limpo só os comando não ???

#!/bin/bash
tput clear
pass=0000 ; count=0
CV="\x1B[0;38;5;196m"
CVD="\x1B[0;38;5;2m"
FC="\x1B[m"

if (($count < 3));then
let count++ ; echo -e "\n${CVD} Tentativas: ${count}/3:${FC}" ; read -p " Digite a Senha: " -n4 senha
[[ "$senha" = "$pass" ]] && echo -e "\n${CVD} Logado na ${count}ª tentativa${FC}\n" || { echo -e "\n${CV} Senha ERRADA${FC}" ; PEGA_SENHA ; }
else
echo -e "${CV} Número de tentativas esgotado\n ${FC}" ; exit
fi


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



5. Re: Dúvida SHell Script


oxidante

(usa Debian)

Enviado em 28/05/2018 - 00:00h

O problema no código do antonio é que a variável "valor" é sempre inicializada em "0" e a nova instância do script não saberá que a var foi incrementada previamente. Pra resolver isso, crie uma condição no início do script para checar se é uma nova instância ou não. Se for a primeira, inicializa a variável "valor" usando export. Abaixo um exemplo de como isso pode ser feito.

autentica.sh:

#!/bin/bash

# Se for a primeira instancia do script (ou seja, sem o argumento --nova),
# entao inicializa a variavel "valor" usando export,
# de modo que as instancias filhas consigam enxergar a mesma var.
if [[ "$1" != "--nova" ]];then
export valor=0
fi

pass="111"

echo "Senha:"
read senha
if [[ "$senha" -eq "$pass" ]]; then
echo "logado"
else
let valor++
echo "Tentativas $valor de 3"
./autentica.sh --nova
fi



6. Re: Dúvida SHell Script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 29/05/2018 - 13:11h

Mauriciodez escreveu:

msoliver escreveu:

Boa noite Antonio.
Segue sugestão:
#!/bin/bash
tput clear
pass=0000 ; count=0
CV="\x1B[0;38;5;196m"
CVD="\x1B[0;38;5;2m"
FC="\x1B[m"

PEGA_SENHA() {
if (($count < 3));then
let count++ ; echo -e "\n${CVD} Tentativas: ${count}/3:${FC}" ; read -p " Digite a Senha: " -n4 senha
[[ "$senha" = "$pass" ]] && echo -e "\n${CVD} Logado na ${count}ª tentativa${FC}\n" || { echo -e "\n${CV} Senha ERRADA${FC}" ; PEGA_SENHA ; }
else
echo -e "${CV} Número de tentativas esgotado\n ${FC}" ; exit
fi
}

PEGA_SENHA


marcelo oliver


Marcelão ... me explica uma parada ... se no seu script só existe 1 função, qual a finalidade de faze-la ? não seria mais limpo só os comando não ???

#!/bin/bash
tput clear
pass=0000 ; count=0
CV="\x1B[0;38;5;196m"
CVD="\x1B[0;38;5;2m"
FC="\x1B[m"

if (($count < 3));then
let count++ ; echo -e "\n${CVD} Tentativas: ${count}/3:${FC}" ; read -p " Digite a Senha: " -n4 senha
[[ "$senha" = "$pass" ]] && echo -e "\n${CVD} Logado na ${count}ª tentativa${FC}\n" || { echo -e "\n${CV} Senha ERRADA${FC}" ; PEGA_SENHA ; }
else
echo -e "${CV} Número de tentativas esgotado\n ${FC}" ; exit
fi


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------


Mauricio.
A finalidade da função e fazer o "looping" sem utillizar um laço, seja "for" ou "while"...

marcelo oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts