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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts