Problemas com laço de repetição for [RESOLVIDO]

1. Problemas com laço de repetição for [RESOLVIDO]

Ricardo Farias
RickG4

(usa Ubuntu)

Enviado em 19/04/2020 - 14:34h

Boa tarde galera, é o seguinte, na minha pasta pessoal que fica em /home/usuario tenho dois arquivos, um arquivo chamado "for.sh" e outro chamado "lista.txt". Nessa lista há 10 nomes separados por espaço, eu gostaria de usar o laço for para percorrer essa lista de nomes e exibi-los no terminal, o código que estou executando é esse:
#!/bin/bash

ARQUIVO=/home/usuario/lista.txt

for nomes in 'cat $ARQUIVO'
do
echo $nomes
done


Mas infelizmente a saída do comando é:
cat $ARQUIVO 


Já vi diversos vídeos onde a estrutura é a mesma, e mesmo literalmente copiando o código para meu computador e colando aqui, não funciona. Em alguns blogs e vídeos vi que alteram a variável built-in IFS, que regula separadores, acho que é isso, mas também não funcionou, estou usando a bash do Lubuntu.


  


2. Re: Problemas com laço de repetição for

Matheus
pylm

(usa Gentoo)

Enviado em 19/04/2020 - 17:24h

Se tu quer iterar sobre o resultado de um comando em bash tens que chamar ele assim:


$(comando)


Enquanto que 'cat $ARQUIVO' é só uma string pro interpretador.


#!/bin/bash

ARQUIVO=/home/usuario/lista.txt

for nomes in $(cat $ARQUIVO); do
echo $nomes
done



3. Re: Problemas com laço de repetição for [RESOLVIDO]

Ricardo Farias
RickG4

(usa Ubuntu)

Enviado em 19/04/2020 - 18:09h

pylm escreveu:

Se tu quer iterar sobre o resultado de um comando em bash tens que chamar ele assim:


$(comando)


Enquanto que 'cat $ARQUIVO' é só uma string pro interpretador.


#!/bin/bash

ARQUIVO=/home/usuario/lista.txt

for nomes in $(cat $ARQUIVO); do
echo $nomes
done

Valeu cara, deu certinho, mas pelo vídeo que assisti o cara conseguiu usar só colocando 'cat $ARQUIVO' (nesse sentido né, porque o exemplo dele era outro), como pôde funcionar? Ta aqui o link do vídeo https://www.youtube.com/watch?v=6hqPLV7XB0Q , o exemplo em questão está no minuto 4:10 do vídeo




4. Re: Problemas com laço de repetição for [RESOLVIDO]

Matheus
pylm

(usa Gentoo)

Enviado em 19/04/2020 - 18:26h


RickG4 escreveu:

pylm escreveu:

Se tu quer iterar sobre o resultado de um comando em bash tens que chamar ele assim:


$(comando)


Enquanto que 'cat $ARQUIVO' é só uma string pro interpretador.


#!/bin/bash

ARQUIVO=/home/usuario/lista.txt

for nomes in $(cat $ARQUIVO); do
echo $nomes
done

Valeu cara, deu certinho, mas pelo vídeo que assisti o cara conseguiu usar só colocando 'cat $ARQUIVO' (nesse sentido né, porque o exemplo dele era outro), como pôde funcionar? Ta aqui o link do vídeo https://www.youtube.com/watch?v=6hqPLV7XB0Q , o exemplo em questão está no minuto 4:10 do vídeo



Ele não usa aspas simples mas sim crases.

` é diferente de '



5. Re: Problemas com laço de repetição for

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 19/04/2020 - 18:29h

Atenção com os sinais no bash...
- Quando se usa o apóstrofo, 'cat arquivo', o bash interpreta tudo como literal (não executa comandos, só reescreve todos os caracteres).

- Comandos devem ser colocados entre acentos grave (crase), assim `cat arquivo`.



6. Re: Problemas com laço de repetição for [RESOLVIDO]

Ricardo Farias
RickG4

(usa Ubuntu)

Enviado em 19/04/2020 - 18:30h

Obrigado gente, shell é realmente cheio de detalhes né, isso passou completamente despercebido por mim, mas agora entendi, valeu galera!!


7. Re: Problemas com laço de repetição for [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 19/04/2020 - 21:06h

RickG4 escreveu:

Obrigado gente, shell é realmente cheio de detalhes né, isso passou completamente despercebido por mim, mas agora entendi, valeu galera!!

Boa noite RickG4, muitos detalhes e opções....
Segue:
echo 'Nome_'{00..12}|tr " " ", " > nomes.txt
cat nomes.txt
Nome_00,Nome_01,Nome_02,Nome_03,Nome_04,Nome_05,Nome_06,Nome_07,Nome_08,Nome_09,Nome_10,Nome_11,Nome_12
awk 'BEGIN{RS=","} {printf "%02dº Nome: %s\n" ,NR,$1}' nomes.txt
01º Nome: Nome_00
02º Nome: Nome_01
03º Nome: Nome_02
04º Nome: Nome_03
05º Nome: Nome_04
06º Nome: Nome_05
07º Nome: Nome_06
08º Nome: Nome_07
09º Nome: Nome_08
10º Nome: Nome_09
11º Nome: Nome_10
12º Nome: Nome_11
13º Nome: Nome_12

IFS="," read -a NOME <<< $(cat nomes.txt)
printf "Nome: %s\n" "${NOME[@]}"
Nome: Nome_00
Nome: Nome_01
Nome: Nome_02
Nome: Nome_03
Nome: Nome_04
Nome: Nome_05
Nome: Nome_06
Nome: Nome_07
Nome: Nome_08
Nome: Nome_09
Nome: Nome_10
Nome: Nome_11
Nome: Nome_12


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






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts