Arrays

1. Arrays

JOELSON VIEIRA OLIVEIRA
jvo

(usa Ubuntu)

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



  


2. Re: Arrays

Paulo
paulo1205

(usa Ubuntu)

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

Marcelo Oliver
msoliver

(usa Debian)

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

Paulo
paulo1205

(usa Ubuntu)

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

Marcelo Oliver
msoliver

(usa Debian)

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

Paulo Dias
di4s

(usa XUbuntu)

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

Ryuk Shinigami
Ryuk

(usa Nenhuma)

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







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts