shell script [RESOLVIDO]

1. shell script [RESOLVIDO]

yury rogens da silveira castro de araujo
yuryrogens

(usa Debian)

Enviado em 12/05/2017 - 09:46h

como ficaria esse programa em shell na função estou com dificuldades em escrever

- O usuário entra no programa utilizando o seu nome como
parâmetro
- Aparecerá a tela de boas vindas constando o nome deste
usuário
- Ele faz um cadastro (poucos dados só para simular, cpf é
obrigatório)
- Ele é jogado para a segunda parte (de compra), nesta
parte é pedido o cpf novamente e se o mesmo estiver
errado (de acordo com o que foi cadastrado), o script volta
para cadastrar o cpf novamente

fiz dessa forma

echo "seja bem vindo, faça seu cadastro"
echo "informe sua cidade"
read cidade
echo "informe seu cep"
read cep
echo "informe seu cpf
read cpf

echo "seu cadastro foi realizado com sucesso"
cadastro()
{
if [ "$cpf" -ne "000" ]; then
echo "cpf valido"
else
echo "cpf invalido porfavor tente novamente"
fi
}
return

estou querendo que quando o cara digitar o cpf invalido volte para o campo pedindo novamente o cpf.


  


2. Re: shell script [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/05/2017 - 10:31h

Fiz a olho, sem testes:
Leia "man bash 1" e use o comando help:

help while
help if
help read
...

para se inteirar dos comandos.
É mais ou menos isto, lembrando que há outros modos:

cadastro() {
while true
do
read -p "digite seu cpf" cpf
if [ "$cpf" -ne "000" ]; then
echo "cpf valido"
break
else
echo "cpf invalido porfavor tente novamente"
continue
fi
done
}


----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Re: shell script [RESOLVIDO]

yury rogens da silveira castro de araujo
yuryrogens

(usa Debian)

Enviado em 12/05/2017 - 10:36h

não da certo.


4. Re: shell script [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/05/2017 - 10:51h

if [ "$cpf" -ne "000" ]; then 


O operador -ne (not equal) é usado para números. Quando você escreve "000" não se trata de um número e sim de uma string.
Para testar diferença de strings você usa !=.

if [ "$cpf" != "000" ]; then 


O curioso é que em perl existe um operador ne, sem hífen, que serve apenas para strings, justo o contrário.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



5. Re: shell script [RESOLVIDO]

yury rogens da silveira castro de araujo
yuryrogens

(usa Debian)

Enviado em 12/05/2017 - 11:27h

ainda sim não executa nada mesmo com todo código descrito acima.


6. Re: shell script

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/05/2017 - 11:37h

Você só declarou a função. Não a chamou.
Vejamos:

#!/bin/bash

cadastro() {
while true
do
read -p "digite seu cpf" cpf
if [ "$cpf" != "000" ]; then
echo "cpf valido"
break
else
echo "cpf invalido porfavor tente novamente"
continue
fi
done

}

echo -e "seja bem vindo, faça seu cadastro\n"
read -p "informe sua cidade" cidade
echo -p "informe seu cep" cep

cadastro


Veja que na última linha está escrito cadastro.
É ela que faz executar a função cadastro() lá atrás.

A variável $cpf declarada dentro de cadastro possui existência local.
Eu escrevi a função de um jeito que ela retorna o valor digitado para fora dela.

Em shell o jeito de se retornar valores é meio torto se comparado com outras linguagens, mas é o que tem.
Veja se funciona. Se der erro, cole as mensagens dos erros no fórum.

Você ainda pode melhorar o texto das perguntas do programa colocando pontuação, espaçamentos, dois pontos, letras maíusculas como em frases etc. Fica visualmente melhor :)

EDIT: Posso ter-me confundido, mas pode ser que a variável $cpf consiga manter o valor após encerrar a chamada da função cadastro. Vou mudar lá em cima.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



7. Re: shell script [RESOLVIDO]

yury rogens da silveira castro de araujo
yuryrogens

(usa Debian)

Enviado em 12/05/2017 - 12:35h

vlw deu certo com a lógica porém tive que mudar algumas coisas

ficou dessa forma

cadastro(){
while true
do
echo "digite seu cpf para o login"
read e
if [ "$e" = "$d" ]; then
echo "cpf valido"
break
else
echo "cpf invalido tente novamente"
continue
fi
done
}

echo "seja bem vindo, faça seu cadastro"
echo "informe sua cidade"
read b
echo "informe seu cep"
read c
echo "informe seu cpf"
read d
cadastro

com essas linhas de código deu certo, vlw.


8. Re: shell script [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/05/2017 - 14:18h

Só mais uma dica: você pode usar o texto da pergunta para ler a variável no mesmo comando.

read -p "Digite seu CPF: " cpf 


Aí ele mostra a mensagem e recebe o valor na variável tudo junto.
Fica mais bonitinho e gasta um comando a menos. :-P

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



9. Re: shell script [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/05/2017 - 15:04h

yuryrogens escreveu:

vlw deu certo com a lógica porém tive que mudar algumas coisas

ficou dessa forma

cadastro(){
while true
do
echo "digite seu cpf para o login"
read e
if [ "$e" = "$d" ]; then
echo "cpf valido"
break
else
echo "cpf invalido tente novamente"
continue
fi
done
}

echo "seja bem vindo, faça seu cadastro"
echo "informe sua cidade"
read b
echo "informe seu cep"
read c
echo "informe seu cpf"
read d

cadastro

com essas linhas de código deu certo, vlw.


Boa tarde.
Segue sugestão para otimizar o seu script (parte marcada em negrito)
echo -e "\n Seja bem vindo, faça seu cadastro\n Informe o solicitado.\n"
for INFO in Cidade Estado CEP CPF;do
read -p "${INFO}: " ${INFO};done


Lendo as variáveis:
for INFO in Cidade Estado CEP CPF;do echo "${INFO}: ${!INFO}";done 


OBS: Para VALIDAR o CPF, veja:
https://books.google.com.br/books?id=snmJepzoNfgC&pg=PA403&lpg=PA403&dq=validar+CPF+shel...

marcelo oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts