Array de perguntas e respostas em bash [RESOLVIDO]

1. Array de perguntas e respostas em bash [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 07/07/2015 - 10:22h

Olá, amigos linuxistas.

Tudo bem?
Estou querendo desenvolver um script simples, tipo cadastro em BASH. O que importa pra mim, é o seguinte:
Tenho uma sequencia de 7 perguntas, e 7 variáreis, cada uma destas variáveis receberá uma resposta de cada uma das perguntas.
Quero checar se a variável está em branco ou não. Pensei em colocar um loop para cada pergunta que faz o seguinte:
Exibe a 1a pergunta "Qual o seu usuário?", recebe a resposta na variável $user e verifica se o usuário foi digitado ou simplemente está em branco. Estando OK, avança. Senão, refaz a pergunta. Isso até a última pergunta. Mas, se eu ficar repetindo os loops para cada pergunta/resposta, isso fará com que o código fique grande, até chato/ruim de ler.
Então, pensei no seguinte, colocar dois arrays: um com as 7 perguntas e outro com as 7 variáveis que receberão as respostas.
Usando um único loop e um único contador, exibir a pergunta 1, receber a resposta na variável 1 e verificar se foi digitada.
Está tudo OK? Soma 1 no contador e vai para a pergunta 2 / resposta 2 (também verificando se a resposta foi digitada)... Assim até a pergunta 7 / resposta 7.
Depois, usarei as variáveis (respostas) em momentos diferentes do script. Como poderei fazer tal script? Pois, ao pesquisar no Google, vi que existia 2 arrays com valores pré-definidos que eram percorridos juntos e exibia-se os valores, porém sem o usuário alterar nada. Algo do tipo:
array_a[1] = 1 / array_b[1] = BIT
array_a[2] = 4 / array_b[2] = NIBBLE
array_a[3] = 8 / array_b[3] = BYTE
.... etc
Mas não é isso que eu quero.

Desde já agradeço a atenção de todos, me desculpo pelo longo texto e espero ter me expressado de forma coerente sendo fácil expressar a minha dúvida.
Atenciosamente, Vinícius.


  


2. Re: Array de perguntas e respostas em bash [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 07/07/2015 - 11:21h

Amigo, pode ser mais ou menos assim:


#!/bin/bash

# aqui voce coloca as perguntas (vai de 0 ate n-1, ou seja, 6)
pergunta=( "Pergunta0: " "Pergunta1: " "Pergunta2: " "Pergunta3: "
"Pergunta4: " "Pergunta5: " "Pergunta6: ")

# um loop
for i in 0 1 2 3 4 5 6; do
# Mostra a pergunta e coloca a resposta no array "resposta"
read -p ${pergunta[$i]} resposta[$i]
done

# Exemplo de como usar
echo ${resposta[0]}


Espero ter ajudado

Se ajudei, marque o tópico como resolvido e clique em melhor resposta!

[]'s

T+

--
http://piadasnerds.com/wp-content/uploads/2011/08/grafico_souProgramador.png


3. Re: Array de perguntas e respostas em bash

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 07/07/2015 - 12:57h

Olá,

Contribuindo com a questao...

Thiago, acho que o @zham86 quer fazer a verificação antes de passar pra proxima.

Bom, usando o código do Thiago, segue as sugestões/adaptações para se caso quiser verificar se o user digitou algo na resposta.



#!/bin/bash

# aqui voce coloca as perguntas (vai de 0 ate n-1, ou seja, 6)
pergunta=( "Pergunta0: " "Pergunta1: " "Pergunta2: " "Pergunta3: "
"Pergunta4: " "Pergunta5: " "Pergunta6: ")

# um loop
for i in 0 1 2 3 4 5 6; do
# Mostra a pergunta, verifica se obteve a resposta e se não for vazia, coloca a resposta no array "resposta", se for vazia, pergunta dnovo.
while [ -z ${resposta[$i]} ]
do read -p ${pergunta[$i]} resposta[$i]
done
done

#teste
for i in 0 1 2 3 4 5 6
do echo "${pergunta[$i]}" "${resposta[$i]}"
done




Abs,


---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


4. Re: Array de perguntas e respostas em bash [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 07/07/2015 - 21:03h

Pessoal,

A ajuda de vocês foi bem útil. Porém, tenho um pequeno problema.
Este é o meu código (em sua forma mais simples):


#!/bin/bash

contador=0

pergunta=([0]="Deseja criar uma nova conta IRC? [sn] "
[1]="Deseja se conectar usando SSL e SASL? [sn] "
[2]="Qual o seu email para cadastro? "
[3]="Qual o seu usuário de IRC? "
[4]="Qual o seu nick IRC? "
[5]="Qual o seu nome completo? "
[6]="Qual a sua senha de acesso à rede IRC? ")

while [ $contador -lt 7 ]
do
read -p "${pergunta[$contador]}" resposta[$contador]
if [ -z ${resposta[$contador]} ];
then
echo -e "Resposta em branco não é permitido!"
else
contador=$[$contador+1]
fi
done

echo ${resposta[@]}


Mas ao executar o script (que por sinal, funciona bem), aparece a mensagem abaixo (ver a linha do nome completo):

Deseja criar uma nova conta IRC? [sn] s
Deseja se conectar usando SSL e SASL? [sn] s
Qual o seu email para cadastro? ********@gmail.com
Qual o seu usuário de IRC? vinicius
Qual o seu nick IRC? vinicius
Qual o seu nome completo? Vinicius de Alencar
./exemplo.sh: linha 16: [: número excessivo de argumentos
Qual a sua senha de acesso à rede IRC? teste
s s ********@gmail.com vinicius vinicius Vinicius de Alencar teste

Mas na última linha, todas as variáveis são exibidas, incluindo o nome completo (Vinicius de Alencar).
De qual forma posso tratar o código para não exibir nenhum erro/mensagem de aviso?

Att, Vinícius.


5. Re: Array de perguntas e respostas em bash [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 07/07/2015 - 21:17h

Fiz algumas mudanças, mas a principio, foi soh trocar de while para for


#!/bin/bash

pergunta=( "Deseja criar uma nova conta IRC? [sn] "
"Deseja se conectar usando SSL e SASL? [sn] "
"Qual o seu email para cadastro? "
"Qual o seu usuário de IRC? "
"Qual o seu nick IRC? "
"Qual o seu nome completo? "
"Qual a sua senha de acesso à rede IRC? "
)

for((contador=0;contador<7;contador++))do
read -p "${pergunta[$contador]}" resposta[$contador]
if [ -z ${resposta[$contador]} ];then
echo -e "Resposta em branco não é permitido!"
let contador--;
fi
done

echo ${resposta[@]}



Espero ter ajudado

[]'s

T+

--
http://piadasnerds.com/wp-content/uploads/2011/08/grafico_souProgramador.png






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts