Pular para o conteúdo
  • Denunciar
  • Indicar

1. Arrays

Enviado em 14/04/2020 - 07:56h

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

Responder tópico

2. Re: Arrays

Enviado em 14/04/2020 - 08:17h

Onde está a parte da leitura?

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

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

Boa tarde Jvo.
Segue sugestão:
#/bin/bash
clear;
n=0;
del_line(){ tput cuu1;tput dl1;}

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[@]}


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________

4. Re: Arrays

Enviado em 15/04/2020 - 16:32h

msoliver escreveu:

Boa tarde Jvo.
Segue sugestão:
#/bin/bash
clear;
n=0;
del_line(){ tput cuu1;tput dl1;}

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)

5. Re: Arrays

Enviado em 15/04/2020 - 18:02h


paulo1205 escreveu:

msoliver escreveu:

Boa tarde Jvo.
Segue sugestão:
#/bin/bash
clear;
n=0;
del_line(){ tput cuu1;tput dl1;}

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

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

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

echo "[@] = ${arr[@]}"

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder