Sie sind auf Seite 1von 6

Introduo Shell no serve apenas para criarmos scripts; ele cada vez mais uma linguagem de programao, e o recurso

o de se criar arrays e deve ser cada vez mais utilizado, porm devemos entender as motivaes e as situaes que essa tcnica deve ser usada. Pretendo deixar bem claro os aspectos do array no bash para que mais e mais pessoas melhorem seus scripts. Tratarei dos aspectos que acho relevantes para este tema tais como: Quando devo usar? Por que devo usar? Quando no usar? Quais so as possveis formas de se declarar um array? Posso trabalhar com ndices alfanumricos?

Espero que com essas explicaes as dvidas que muitos tenham desapaream.

Quando devo usar?


Devemos usar arrays nas seguintes situaes: 1. 2. 3. 4. 5. 6. Quando lidamos com muitos dados do mesmo tipo. Quando esses dados so correlacionados. Quando precisamos trabalhar com esses dados em loops. Quando precisamos de ndices para trabalhar nos dados. Quando queremos evitar a fadiga. Encontrar coisas rapidamente.

H outras motivaes, os programadores do VOL vo encontrar muitos motivos para se utilizar um array, afinal todas as linguagens de programao usam essa estrutura para diversas funcionalidades. Vou explicar um pouco de cada situao que citei acima: 1) Quando lidamos com muitos dados do mesmo tipo: um exemplo muito simples dessa situao quando precisamos criar um baralho. O baralho feito de 52 cartas, ou seja, 52 elementos de um mesmo tipo. Criar 52 duas variveis diferentes, do tipo carta1=A; carta2=2; seria uma pssima prtica de programao, o array seria a melhor escolha. 2) Quando esses dados so correlacionados: ou seja, podemos ter valores inteiros, reais etc, no mesmo vetor. 3) Quando precisamos trabalhar com esses dados em loops: pela sua natureza linear, os arrays so muito fceis de se trabalhar com loops, sendo assim quando muitos desses dados so do mesmo tipo

fica fcil de se trabalhar. 4) Quando precisamos de ndices para trabalhar nos dados: s vezes temos que enumerar as informaes, dando ordem ao casos. Os meses do ano so um bom exemplo para isso. 5) Quando queremos evitar a fadiga: com certeza facilita a sua vida. 6) Encontrar coisas rapidamente: se precisarmos fazer uma busca, o array a estrutura mais simples que existe para se fazer buscas, no a mais rpida, mas tem um custo benefcio razovel.

Por que devo usar? A resposta a essa pergunta simples: Porque voc pode! Simples assim, quando comecei a trabalhar com Shell Script, meus cdigos eram uma zona, parecia que eu nunca tinha programado na minha vida. Conforme fui me aprofundando, comecei a usar funes, variveis locais, traps, opes da linha de comando, arrays, e isso tornou meus cdigos mais simples, limpos e com certeza mais reaproveitveis. O uso de arrays deve ser incentivado, j que quase impossvel se trabalhar com muitos dados sem usar uma estrutura mais complexa do que o simples var=1. Mas lidar com array em shell no to trivial, devido a sua estrutura, e no prestar ateno no que est fazendo pode deixar o seu programa inconsistente, principalmente em shell j que ele no d diversos erros que outras linguagens dariam por erros simples. Lembre-se que o shell no erro se uma varivel no foi inicializada, ele simplesmente ignora e retorna vazio, essa umas coisas que voc deve se preocupar quando estiver manipulando os arrays.

Quando no usar?
Os arrays so relativamentos novos no mundo do SS, eles so implementados pelo bash e as verses mais antigas no suportam esse tipo de estrutura. Ento usar um array significa diminuir a possibilidade de portar o seu script ou programa, para um outro Linux mais antigo, ou para outro que shell que no o bash. Se voc est buscando portabilidade o array no uma boa, j que somente o bash atualmente possui essa capacidade, ento o foco aqui apenas em scripts que rodaro em bash novos, todos os exemplos que darei aqui so rodados em um: Debian GNU/Linux SID

Bash version 3.1.17 Tambm no aconselhvel utilizar arrays quando temos poucas variveis, assim como um switch case intil para apenas dois valores, usar um array para poucos valores apenas trar lgica desnecessria para o programa, mas como sempre digo isso tudo uma questo de bom senso; s vezes vale a pena ter um array para 3 valores, s vezes no vale a pena t-lo para 10, embora sejam situaes bem mais raras.

Quais so as possveis formas de se declarar um array? Em shell temos basicamente duas maneiras de se declarar um array, vou tratar cada uma com o mximo de detalhes possveis e em quais situaes uma deveria ser usada e no a outra. A primeira maneira : array=(valor1 valor2 valor3) Acima temos um array com trs valores, internamente o shell armazena essa estrutura dessa maneira: array=([0]="valor1" [1]="valor2" [2]="valor3") Esse tipo de declarao deixa o bash gerenciar os ndices, ou seja, ele faz sozinho o incremento do ndice. Vamos ver com mais detalhes essa declarao: array == Nome do array (valor1 valor2 valor3) == Valores separados por espaos (lembre-se: SEPARADOS POR ESPAOS) Vamos a segunda maneira de se criar um array: array2[0]='valor1' array2[1]='valor2' array2[2]='valor3' Vamos ver como o bash criou a estrutura: array2=([0]="valor1" [1]="valor2" [2]="valor3") Como pode ser visto, no faz a menor diferena para o bash como feita a declarao, a estrutura sempre a mesma.

Como ler os valores de um array?

A primeira tentativa quando vamos ler um valor de uma varivel fazer: $ VAR=1 $ echo $VAR 1 Se fizermos isso para um array dar errado: $ array[0]='valor1' $ array[1]='valor2' $ array[2]='valor3' $ echo $array[1] valor1[1] O que deu de errado? Estvamos esperando um resultado bem diferente: 'valor2', era o que queramos. Vamos entender melhor o problema para que possamos resolver, veja o que ocorre abaixo: $ echo $array valor1 O $array sempre retorna o valor do primeiro elemento, como o shell tem que interpretar os valores, ele no l at o fim, por isso ocorre esse problema, para que isso no ocorra temos que fazer: $ echo ${array[1]} valor2 O uso de {} uma boa prtica, se acostume a utiliz-la no somente com array, mas tambm com variveis normais.

Posso trabalhar com ndices alfanumricos? Em certas linguagens possvel usar valores alfanumricos como ndices em um array, em shell isso no possvel, apenas nmeros inteiros so aceitos. Vamos ver o que ocorre quando tentamos usar uma letra como ndice: $ array[a]='valor1' $ echo ${array[a]} valor1 Quando olhamos isso realmente parece que funciona, mas no se deixe enganar, isso NO est funcionando, vamos analisar com calma para vermos o porque disso estar errado. $ array[b]='valor2'

$ echo ${array[b]} valor2 Novamente parece que funciona, mas NO est funcionando, vamos olhar novamente o ndice 'a': $ echo ${array[a]} valor2 Viu, espervamos que viesse o 'valor1'; porm o que apareceu foi o 'valor2'; mas por qu? O bash no deu erro. Vamos a explicao: Primeiro vamos ver como o array est armazenado: array=([0]="valor2") Como pode ser, somente h o valor '0', no h nem 'a', muito menos 'b'; para entendermos porque isso ocorreu basta fazer: $ echo $((a)) 0 O shell sempre converte as letras para o nmero zero, por isso que tivemos esse problema.

Dicas 1) Listar todos os elementos de um array: echo ${array[*]} 2) Contar os elementos de um array: echo ${#array[*]} 3) Contar tamanho de um elemento do array: echo ${#array[<valor>]} 4) Adicionar um elemento ao array: array=("${array[@]}" "valorn") ou array[${#array[*]}]="valor_novo" 5) Destruir um array: unset array 6) Eliminar um elemento do array:

unset array[valor] http://www.vivaolinux.com.br/artigos/impressora.php?codigo=8402

Das könnte Ihnen auch gefallen