Compare Preços no Buscape e no BondFaro
BuscaPé, líder em comparação de preços na América Latina

Asus Eee PC 0.9 Ghz
512Mb Ram - 4Gb HD

MySQL-Guia do Programador
André Milani

Sony Cyber-shot DSC - T70
8.1 Megapixels

Numb3rs
Primeira Temporada

CD Silence
Sonata Arctica

Pelúcia Snoopy

Patinho Faminto
www.patinho.net

Apostilas
Expr Regular
Remasterização
SED
Shell Script

Distros
Dizinha
Patinho Faminto

Nerd
Desejo Nerd
Shell Scripts

Artístico
Livro
Musica
Poesias
Tirinhas

Bobagens
Ascii Art
Games Antigos
Porque Amar Nerds
Porque Não Amar Nerds

Eu
About Me
Recomendo
Contato
DOAÇÕES

Amigos
Aurélio
Jogos Antigos
NeoDizinha
Nerds Nervosos
ProibidoParaNormais


* = Recentemente Atualizado



website stats
Locations of visitors to this page

Anúncio provido pelo BuscaPé
BuscaPé, líder em comparação de preços na América Latina

Ver Indice Geral da Apostila de Shell Script

Array

Array é como uma lista de variáveis com uma relação entre elas.
Parece complicado, mas vamos ver na prática:

nomes=("Pedro" "Alfredo" "José")

O que foi feito foi definir uma array com 3 nomes diferentes.

Outra forma de definir uma array é:

nomes[0]="Pedro"
nomes[1]="Alfredo"
nomes[2]="José"

Repare que ao definir a Array sempre é colocado um número entre colchetes, esse número é com um índice, assim é possível identificar um valor específico.
Veja também que o primeiro número é zero.

 
 

Como imprimir um valor de uma Array?
Muito simples, basta digitar ${nome_array[indice_a_ser_impresso]}
Vamos a um exemplo:

exemplo_array.sh

frutas=("Maçã" "Banana" "Mamão" "Abacaxi")
echo "A fruta de Indice 2 é: ${frutas[2]}"
Mostrará na tela
A fruta de Indice 2 é: Mamão

Lembre que:
o "indice 0" é a maçã,
o "indice 1" é a banana,
o "indice 2" é o mamão...

 
 

Juntando Array com o For
Suponha que tenha uma array e que tenha que imprimir todos valores dessa array e adicionando uma frase, como fazer?

array_e_for.sh

frutas=("Maçã" "Banana" "Mamão" "Abacaxi")

for ((x=0;x<=3;x++));
do
	echo "A fruta de Indice ${x} é: ${frutas[$x]}"
done

 
 

Então toda vez que eu adicionar ou remover um valor da array terei que mecher no comando For manualmente?
Não. O array tem um comando que retorna quantos elementos tem dentro dele. Esse comando é:
${#nome_da_array[@]}
Vamos substituir nosso script então.

array_e_for2.sh

frutas=("Maçã" "Banana" "Mamão" "Abacaxi")

for ((x=0;x<=${#frutas[@]};x++));
do
	echo "A fruta de Indice ${x} é: ${frutas[$x]}"
done
Mostrará na tela
A fruta de Indice 0 é: Maçã
A fruta de Indice 1 é: Banana
A fruta de Indice 2 é: Mamão
A fruta de Indice 3 é: Abacaxi
A fruta de Indice 4 é:

Você deve estar pensando agora: - Ei! Esse script e está com defeito.

Vamos com calma. Eu deixei errado para você ver o erro e pensar um pouco.
Agora vamos a explicação.

O "${#frutas[@]}" retorna quantos elementos têm na Array frutas. A array frutas contém 4 elementos.
Mas o FOR inicia no ponto ZERO porque o primeiro elemento de uma Array tem o índice ZERO.
Então o INDICE 0 é o primeiro elemento, certo?
Complicado a primeira vista, né?

Ao entrar no FOR o X está definido como 0 e o for deve ser executado até X atingir 4.
Veja só:

1 vez que entrou no FOR: X = 0
2 vez que entrou no FOR: X = 1
3 vez que entrou no FOR: X = 2
4 vez que entrou no FOR: X = 3
5 vez que entrou no FOR: X = 4

Achou o erro? Para X atingir o valor 4 ( número de elementos dentro do Array ) o FOR precisa ser executado 5 vezes.
Mas o que nós queremos é imprimir apenas até o último índice da array, esse índice é o número "3".
Logo a solução para nosso problema é: "${#frutas[@]} - 1"

array_e_for3.sh

frutas=("Maçã" "Banana" "Mamão" "Abacaxi")

for ((x=0;x<=$((${#frutas[@]}-1));x++));
do
	echo "A fruta de Indice ${x} é: ${frutas[$x]}"
done

 
 

Opções para usar com Arrays
${#nome_array[@]}Imprime o número de elementos da Array
${nome_array[@]}Imprime todos os elementos da Array
${nome_array[@]:1}Imprime do Indice 1 até o final da Array
${nome_array[@]:1:3}Imprime 3 Indices, começa a imprimir a partir do Indice 1

Veja a diferença dos comandos em um exemplo:

comandos_array.sh

indices=("Indice 0" "Indice 1" "Indice 2" "Indice 3" "Indice 4" "Indice 5")

echo "O #indices[@] o numero de indices dentro da array: ${#indices[@]}"
echo "O indices[@] imprime todos indices: ${indices[@]}"
echo "O indices[@]:3 imprime do indice 3 até o final: ${indices[@]:3}"
echo "O indices[@]:2:3 imprime 3 indices, começa a imprimir do indice 2: ${indices[@]:2:3}"
Mostrará na tela
O #indices[@] o numero de indices dentro da array: 6
O indices[@] imprime todos indices: Indice 0 Indice 1 Indice 2 Indice 3 Indice 4 Indice 5
O indices[@]:3 imprime do indice 3 até o final: Indice 3 Indice 4 Indice 5
O indices[@]:2:3 imprime 3 indices, começa a imprimir do indice 2: Indice 2 Indice 3 Indice 4

 
 

Nota: 9

Votar:
Postado em: 2008-03-30

Ver Indice Geral da Apostila de Shell Script

Doações
Se quer nos ajudar, pode doar pelo PagSeguro

Ou pode doar pelo Paypal clicando no botão DONATE

Compare Produtos, Lojas e Preços


As poesias devem virar um livro impresso?
Claro
Só se tiver menos de 60 páginas
Só se tiver entre 60 e 120 páginas
Só se tiver mais que 120 páginas
Só vou comprar se for barato
Só vou comprar para você ficar feliz
Livro? Que Livro? Que poesia?
Resultado