Linuxhard.org

7 anos de Linux no Brasil – Dicas, Artigos e Notícias de Linux e Hardware
  • Início
  • Resulinux
  • KDuXP
  • Baixe Agora
  • Versões em Teste
  • Screenshots
  • Fórum
  • Quem somos?
  • Wiki

Utilização de Variáveis Array com a Bourne Shell

Luciano Andress Martini | 20 de julho de 2008
Easy AdSense by Unreal

Bourne shell, popularmente conhecida como Shell Script é uma das mais poderosas linguagens para resolver seus problemas utilizando Linux.

Neste artigo ensino a trabalhar com arrays em shell script.

O que são Arrays?

Arrays são variáveis capazes de armazenar multiplos valores, e serem processadas dentro de laços para por exemplo processar as notas de um aluno.

Não é preciso declarar as Arrays ou chutar valores máximos para a Array, as variáveis em shell são dinâmicas, isto é, Bourne Shell é capaz de aumentar o tamanho de uma variável conforme precisamos de mais espaço.

Veja como os dados são armazenados em Arrays:
As váriaveis serão criadas automaticamente, use a atribuição de valores como mostrado abaixo:
Sintaxe de Arrays em Shell Script: Nome_da_variavel[posição da array]=”valor inteiro, cadeia, texto(gigante) ou real”

Tomemos como exemplo a váriavel Notas:

Notas[1]=”5,5″
Notas[2]=”6,0″
Notas[3]=”7,25″
Notas[4]=”8,5″

Sintaxe para recuperação de valores de uma Array:

Uma vez armazenados os valores, poderemos obter o valor de uma Array, com a seguinte sintaxe: ${nome_da_variavel[posicao_da_array]

Veja um exemplo de script, para retornar valores de arrays:

#!/bin/bash
#Script por Luciano Andress Martini, le as notas dos alunos.
echo 'Digite as notas do aluno:'
for ((i=1;i<=10;i++)); do read notas[$i]; done
echo 'As notas do aluno são: '
#Observe que os simbolos {} são obrigatórios, ou a array retornará um valor nulo.
for ((i=1;i<=10;i++)); do echo ${notas[$i]}; done

Categorias
Programação
Comentários RSS
Comentários RSS
Trackback
Trackback

Abrir o código fonte? »

5 Respostas para “Utilização de Variáveis Array com a Bourne Shell”

  1. tales disse:
    20 de julho de 2008 às 20:10

    Comentário postado por pbrito81

    Ótimo artigo! Simples e direto. Só um detalhezinho: como saber o tamanho de um array, já que eles são dinâmicos?

  2. luciano disse:
    20 de julho de 2008 às 20:12

    Como eu disse as arrays não tem um tamanho fixo, aumentam sozinhas de tamanho de acordo com o dado que você precisa colocar nelas.

    Por exemplo se você digitar:
    #!/bin/bash

    hora[1]=’doze horas’
    #Foi declarada uma array hora, com uma única posição(1), do tipo cadeira(string).
    #em seguida foi dado a ela o valor doze horas, por enquanto ela tem apenas uma posição…

    hora[1]=’12′
    #A array mudou seu tipo automaticamente para inteiro…

    hora[2]=’14′
    #A array hora agora tem duas posições de memória 1 e 2

    hora[3]=’eu’
    #A array hora agora é mista, tem dois tipos de dados inteiro e cadeia. Agora ela tem 3 posições de memória.

    hora[3]=”
    #A array hora agora voltou a ter apenas duas posições de memória… 1 e 2 e é do tipo inteiro

    #legal não?

  3. tales disse:
    20 de julho de 2008 às 20:13

    Comentário postado por pbrito81

    Sim, é legal mesmo. Mas, imagine que você precise passar esse array como parâmetro para algum outro script, ou uma função. Ou que algum script retorne um array. Como saber o seu tamanho dinamicamente? É possível?

  4. luciano disse:
    20 de julho de 2008 às 20:13

    Bom creio que poderá usa-la normalmente em funções e em outros scripts com o export.

    Para medir o tamanho da array você pode criar uma função usando um laço do tipo while, e medir cada posição de uma array parando quando encontrar uma posição em branco… Mas esta função será lenta.

    Você poderá declara-la dentro de uma biblioteca para o seu programa bourne shell e chama-la no cabeçalho.

    arquivo biblioteca.shlib======

    arraysize(){
    #Parâmetros que você passar para a função
    #irão gerar automaticamente as variáveis $1, $2, $3 (sendo cada um deles)
    #um parâmetro separado por espaço. Passe a variável.
    #Em seguida faça um processamento usando laço while ou que desejar
    #Se precisar de ajuda faça um comentário
    }

    outrasfuncoes(){ etc }
    ====fim do arquivo biblioteca.shlib

    arquivo meu_script.sh=======
    #!/bin/bash
    #Declarando bibliotecas com ponto e caminho.
    . ./biblioteca.shlib
    . ./outrasbibliotecas.shlib etc…

    minharray=[1]=23
    minharray=[2]=”putz”

    export minharray

    #Chamando a função e medindo minhaarray
    arraysize minhaarray

    ====== fim do arquivo meu_script.sh

    Interpretando ou compilando o script:
    Para interpretar:
    bash meu_script.sh ou
    chmod +x meu_script.sh
    ./meu_script.sh

    Para compilar:
    shc -r -f meu_script.sh
    mv meu_script.sh.x script
    ./script

  5. tales disse:
    20 de julho de 2008 às 20:15

    Comentário postado por pbrito81

    Olha que legal, Luciano! Se você colocar um # antes do nome do array, o bash te retorna a quantidade de elementos, independentemente de qual posição eles estão:

    exemplo:

    a[0]=1
    a[1]=3
    a[10]=abcde

    agora, ${#a[10]} retorna 5, que é o comprimento do valor de a[10],
    e como a[*] retorna todos os valores do array, ${#a[*]} retorna a quantidade de valores!

    Essa do # eu não conhecia. Experimente ${#PATH} por exemplo…

    Valeu Luciano, por trazer a tona um recurso tão útil nos scripts, e que muita gente não conhecia (incluindo-me!).

Deixe uma Resposta

Clique aqui para cancelar a resposta.

Publicidade

Traduzir este Site

  • Categorias

    • Hardware (1)
    • Linux (13)
      • Sistema de Arquivos (1)
    • Mundo Software Livre (53)
    • Programação (4)
    • TI (2)

Arquivos

  • julho 2010
  • maio 2010
  • março 2010
  • fevereiro 2010
  • janeiro 2010
  • dezembro 2009
  • novembro 2009
  • outubro 2009
  • agosto 2009
  • julho 2009
  • maio 2009
  • abril 2009
  • março 2009
  • fevereiro 2009
  • janeiro 2009
  • dezembro 2008
  • novembro 2008
  • outubro 2008
  • setembro 2008
  • julho 2008

Links

  • br-linux
  • Portal Criativa
  • Ubuntu-BR

Parceiros

Administração

  • Registrar-se
  • Login
  • Posts RSS
  • RSS dos comentários
  • WordPress.org
rss Comentários RSS valid xhtml 1.1 design by jide powered by Wordpress get firefox by webmaster