Bom dia..estou iniciando na programação recebi exercícios pra fazer em arrays. fiquei travado nesse aqui:
Crie um Shell Script que deverá solicitar a digitação de “n” nomes, após receber os nomes o script deverá imprimir todos os nomes informados
meu script:
clear
while true;
do
echo "Digite nomes: ${nome[$cont]}"
for cont in "$(seq 0 ${#nome[@]})"
do
echo "${nome[$cont]}"
done
done
Usando Bash ou Ksh, provavelmente você teria de ter algo parecido com o seguinte.
# Fase de leitura
for (( i=0; i<n; i++ )); do
# Lê os itens para nome[$i].
done
# Fase de impressão/uso
for (( i=0; i<n; i++ )); do
# Usa os valores de ${nome[$i]}
done
... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)
3. Re: Arrays
msoliverusa Debian
Post recolhido
Enviado em 14/04/2020 - 17:04h
jvo escreveu:
Bom dia..estou iniciando na programação recebi exercícios pra fazer em arrays. fiquei travado nesse aqui:
Crie um Shell Script que deverá solicitar a digitação de “n” nomes, após receber os nomes o script deverá imprimir todos os nomes informados
meu script:
clear
while true;
do
echo "Digite nomes: ${nome[$cont]}"
for cont in "$(seq 0 ${#nome[@]})"
do
echo "${nome[$cont]}"
done
done
printf "\nDigite [Xx] para interromper o looping e listar os Nomes.\n"
while :;do
read -p "Informe o $((n+1))º Nome: " nome;
if [[ "$nome" =~ ^([Xx])$ ]];then
break;
else
Array_Nome[$n]="${nome^}";sleep 1;del_line; # ${nome^} => Converte a 1ª letra para Maiúscula.
fi
let n++;
done
clear;
printf "Nomes Informados:\n"
printf "%s\n" ${Array_Nome[@]}
printf "\nDigite [Xx] para interromper o looping e listar os Nomes.\n"
while :;do
read -p "Informe o $((n+1))º Nome: " nome;
if [[ "$nome" =~ ^([Xx])$ ]];then
break;
else
Array_Nome[$n]="${nome^}";sleep 1;del_line; # ${nome^} => Converte a 1ª letra para Maiúscula.
fi
let n++;
done
clear;
printf "Nomes Informados:\n"
printf "%s\n" ${Array_Nome[@]}
Tenho minhas dúvidas de se o que foi pedido foi para digitar uma quantidade indefinida de nomes. Pelo enunciado, pareceu-me que deveria ser uma quantidade n conhecida antecipadamente.
Mas a sugestão que eu quero dar é outra: na hora de imprimir, ponha ${Array_Nome[@]} entre aspas, para evitar que nomes compostos, como “José Carlos” ou “Ana Carolina”, sejam impressos partidos em linhas diferentes, como se cada um deles fossem dois nomes distintos.
Aliás, acho que vale a pena inclusive ampliar a sugestão: quase sempre é uma boa ideia expandir variáveis entre aspas, para evitar que espaços e outros símbolos com sentido especial para o shell, tais como “*”, “?”, parênteses, colchetes e possivelmente outros, sejam interceptados pelo shell e interpretados de modo diferente do que como mera substituição de strings.
... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)
printf "\nDigite [Xx] para interromper o looping e listar os Nomes.\n"
while :;do
read -p "Informe o $((n+1))º Nome: " nome;
if [[ "$nome" =~ ^([Xx])$ ]];then
break;
else
Array_Nome[$n]="${nome^}";sleep 1;del_line; # ${nome^} => Converte a 1ª letra para Maiúscula.
fi
let n++;
done
clear;
printf "Nomes Informados:\n"
printf "%s\n" ${Array_Nome[@]}
Tenho minhas dúvidas de se o que foi pedido foi para digitar uma quantidade indefinida de nomes.
Pelo enunciado, pareceu-me que deveria ser uma quantidade n conhecida antecipadamente.
Mas a sugestão que eu quero dar é outra: na hora de imprimir, ponha ${Array_Nome[@]} entre aspas, para evitar que nomes compostos, como “José Carlos” ou “Ana Carolina”, sejam impressos partidos em linhas diferentes, como se cada um deles fossem dois nomes distintos.
Aliás, acho que vale a pena inclusive ampliar a sugestão: quase sempre é uma boa ideia expandir variáveis entre aspas, para evitar que espaços e outros símbolos com sentido especial para o shell, tais como “*”, “?”, parênteses, colchetes e possivelmente outros, sejam interceptados pelo shell e interpretados de modo diferente do que como mera substituição de strings.
... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)
Tenho minhas dúvidas de se o que foi pedido foi para digitar uma quantidade indefinida de nomes.
Boa tarde Paulo,
É uma questão de interpretação....
Eu entendi que "n", é indefinido...
Caso eu esteja errado, o script, é bem mais simples....
... ${Array_Nome[@]} entre aspas...
Bem lembrado.
Att.: Marcelo Oliver
______________________________________________________________________
6. Re: Arrays
di4susa XUbuntu
Post recolhido
Enviado em 15/04/2020 - 21:16h
Oi,
um outro exemplo:
#!/bin/bash
echo "Digite a lista de nomes, use Ctrl + d para encerrar" ;
while read -p "Nome: " nome ; do
nomes[${#nomes[*]}]="$nome" ;
done
echo -e "\n\nSegue a lista de nomes: " ;
printf "%s \n" "${nomes[@]}" ;
7. Re: Arrays
Ryukusa Nenhuma
Post recolhido
Enviado em 16/04/2020 - 19:07h
jvo escreveu:
Bom dia..estou iniciando na programação recebi exercícios pra fazer em arrays. fiquei travado nesse aqui:
Crie um Shell Script que deverá solicitar a digitação de “n” nomes, após receber os nomes o script deverá imprimir todos os nomes informados
#!/bin/bash
# Exemplo de como preencher um array com o read
# Cada palavra/caractere separado por espaço será um valor do array:
read -a arr -p "Digite os valores para o array: "
n=0
while (( n < ${#arr[*]} )); do
echo "[$n] = ${arr[n]}"
((n++))
done