Problema em armazenar em Array [RESOLVIDO]

1. Problema em armazenar em Array [RESOLVIDO]

Walker Luiz de Freitas
WalkerPR

(usa Linux Mint)

Enviado em 22/08/2013 - 11:05h

Bom dia amigos do VOL,

Pretendo armazenar os nomes de arquivos, existentes em um diretório, em um array, por exemplo:

arq[1] = dados.txt
arq[2] = figura.jpg
arq[3] = rotina.sh

Todavia não estou me acertando com o Script. Segue o código abaixo:

i=0
declare -A arq
for dir in *
do
i=$(expr 1 + $i)
arq[$i] = `$dir`
echo $i ${arq[$i]}
sleep 1
done


Ao executar, ocorre o seguinte retorno:

[root@tasks samples]# ./teste.sh
./teste.sh: line 6: combinepdf: command not found
./teste.sh: line 6: arq[1]: command not found
1
./teste.sh: line 6: cutpdf: command not found
./teste.sh: line 6: arq[2]: command not found
2
./teste.sh: line 6: drypdf: command not found
./teste.sh: line 6: arq[3]: command not found
3
./teste.sh: line 6: laco.sh: command not found
./teste.sh: line 6: arq[4]: command not found
4
./teste.sh: line 6: navegando.sh: command not found
./teste.sh: line 6: arq[5]: command not found
5
./teste.sh: line 6: removepdf: command not found
./teste.sh: line 6: arq[6]: command not found
6
./teste.sh: line 6: teste.sh: command not found
./teste.sh: line 6: arq[7]: command not found
7
[root@tasks samples]#


Não estou me acertando na linha 6 onde quero lançar o nome do arquivo no array:
arq[$i] = `$dir`

Alguém poderia me ajudar?!


  


2. Re: Problema em armazenar em Array [RESOLVIDO]

Filippe
spolti

(usa Fedora)

Enviado em 22/08/2013 - 12:36h

Tira a crases do:

arq[$i] = `$dir`

usando crase o shel vai interpretar o que estiver dentro desta variável como um comando.

use aspas simples ou duplas, porém pode deixar sem também.




3. Re: Problema em armazenar em Array [RESOLVIDO]

Walker Luiz de Freitas
WalkerPR

(usa Linux Mint)

Enviado em 22/08/2013 - 15:13h

filippec escreveu:

Tira a crases do:

arq[$i] = `$dir`

usando crase o shel vai interpretar o que estiver dentro desta variável como um comando.

use aspas simples ou duplas, porém pode deixar sem também.



Boa tarde filippec,

Retirei as crases. Tentei sem nada, com aspas simples ou duplas. Em todas as tentativas o resultado foi:

[root@tasks samples]# ./teste.sh
./teste.sh: line 6: arq[1]: command not found
1
./teste.sh: line 6: arq[2]: command not found
2
./teste.sh: line 6: arq[3]: command not found
3
./teste.sh: line 6: arq[4]: command not found
4
./teste.sh: line 6: arq[5]: command not found
5
./teste.sh: line 6: arq[6]: command not found
6
./teste.sh: line 6: arq[7]: command not found
7
[root@tasks samples]#

Informa o contador, mas não o nome do arquivo devido a erro na linha 6.
Alguma outra sugestão?!


4. Re: Problema em armazenar em Array [RESOLVIDO]

Filippe
spolti

(usa Fedora)

Enviado em 22/08/2013 - 16:22h


Pra atribuir valor pra vetor em shell script não é assim, como nas outras linguagens.

Sei que para tirar itens do vetor

é:

unset VETOR[VALOR_LITERAL]

ex: se o valor for OII
será: unset VETOR[OII]

Para inserir eu n sei ao certo.

tente algo do tipo

dir = `ls -a`
arq = dir

#ai para imprimir as posiões dos vetores vc faz

echo ${arq[1]} 2 3 e assim por diante.

no for vc pode fazer

algo assim

for i in $dir
do
echo ${arq[$i]}
done

para entender melhor como funcionam vetores em shell script veja este artigo:
http://www.vivaolinux.com.br/artigo/Brincando-com-vetores


5. Re: Problema em armazenar em Array [RESOLVIDO]

Walker Luiz de Freitas
WalkerPR

(usa Linux Mint)

Enviado em 22/08/2013 - 16:43h

Olá filippec,

Descobri o erro no script, era o espaço que estava acarretando problema.
Estava assim:
arq[$i] = $dir

Alterei para:
arq[$i]=$dir


O resultado do script abaixo
i=0
for dir in *
do
i=$(expr 1 + $i)
arq[$i]=$dir
echo $i ${arq[$i]}
sleep 1
done

foi o seguinte (mostra indice e nome arquivo)

[root@tasks samples]# ./teste.sh
1 combinepdf
2 cutpdf
3 drypdf
4 laco.sh
5 navegando.sh
6 removepdf
7 teste.sh



6. Re: Problema em armazenar em Array [RESOLVIDO]

Filippe
spolti

(usa Fedora)

Enviado em 22/08/2013 - 17:02h

Blz, :)

Marque o tópico como resolvido.

Abs.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts