Como a maioria das linguagens de programação, os scripts bash às vezes precisam lidar com uma lista de valores relacionados. A forma mais simples é a matriz padrão.
No bash, a programação de arrays é bem diferente, principalmente quando se trata de sintaxe. Os arrays Bash também são estritamente unidimensionais, mas ainda têm muitos usos.
A sintaxe básica dos arrays Bash
Criar um array no bash é simples. Você pode inicializar um array inteiro usando colchetes, por exemplo:
cidade=(Londres Paris Milão "Nova Iorque")
(Você pode encontrar todo o código deste exemplo de cidade em este GitHub Gist.)
Isso cria uma matriz contendo quatro elementos, indexados de 0 a 3. Observe que o quarto valor é uma string entre aspas que consiste em duas palavras. Você precisará citar valores contendo espaços para esclarecer que eles não são valores separados.
Você pode acessar um único elemento usando a sintaxe de colchetes que é comum em todas as linguagens de programação:
cidade[2]
Como isso é bash, você precisará de alguns refinamentos para usar o valor em uma expressão:
- Você precisará prefixar o cifrão ($) ao nome da variável.
- Você também precisará usar chaves ({}) para tornar o nome da variável inequívoco. Por padrão, o bash tratará $city[2] como uma variável chamada cidade. Adicione chaves para dizer ao bash para avaliar os colchetes e o número do índice também.
A sintaxe de acesso à matriz bash padrão é então:
${variable_name[index]}
Aqui está um exemplo completo:
#!/bin/bash
cidade=(Londres Paris Milão "Nova Iorque")
echo ${city[3]}
# Nova Iorque
Em vez de inicializar um array de uma só vez, você pode atribuí-lo passo a passo. Este script é um equivalente mais longo do exemplo anterior:
#!/bin/bash
cidade[0]=Londres
cidade[1]=Paris
cidade[2]=Milão
cidade[3]="Nova York"
echo ${city[3]}
# Nova Iorque
Observe que, em ambos os casos, você precisa ter cuidado para não adicionar nenhum espaço ao redor do sinal de igual. “city[0] = London”, com espaços ao redor do sinal de igual, irá gerar um erro.
Mais usos para arrays Bash
Arrays são perfeitos para armazenar dados relacionados. Aqui está um script de shell (muito limitado) para obter a raiz quadrada de um número:
#!/bin/bash
sqrt[1]=1
sqrt[4]=2
sqrt[9]=3
sqrt[16]=4
sqrt[25]=5
echo ${sqrt[$1]}
Observe que o script usa o valor $1 como o índice da matriz. $1 representa o primeiro argumento de linha de comando que o script recebe, então você pode executar este script assim:
$ ./sqrt.sh 9
3
Você pode estar ciente da $(cmd) sintaxe para executar um comando e salvar sua saída em uma variável. Você pode combinar isso com a sintaxe de inicialização do array para obter um array de arquivos para trabalhar:
arr=( $(ls) )
Uma matriz é muitas vezes uma estrutura de dados perfeita para iterar e Bash não é exceção. Você pode fazer um loop em uma matriz para imprimir cada elemento ou executar uma operação em cada membro.
Você pode endereçar uma matriz em uma por.. dentro ciclo, para iterar sobre seu conteúdo. Por exemplo, aqui está um loop simples que imprime o número de linhas em cada arquivo na matriz arr:
para arquivo em "${arr[@]}"; Faz
wc -l "$arquivo"
feito
# 3 envvars
# 547 httpd.conf
# ...
Observe que esse padrão faz uso do @ símbolo para recuperar todos os elementos da matriz.
Mais sintaxe de matriz Bash
Você pode obter o número de itens em uma matriz usando o seguinte:
echo ${#city[@]}
# 4
Você pode adicionar um novo elemento no final de uma matriz padrão da seguinte forma:
ar+=(4)
Então, para adicionar uma quinta cidade à lista:
cidade+=(Roma)
echo ${city[@]}
# Londres Paris Milão Nova York Roma
Para extrair um pedaço de um array, você pode usar uma sintaxe que se aproxime da operação slice de muitas outras linguagens:
${arr[@]:s: n}
Esta sintaxe retornará uma fatia do array começando na posição s e contendo n Itens. Você pode omitir o :n parte para extrair todos os itens de s até o final da lista.
echo ${city[@]:2:2}
# Milão Nova York
echo ${city[@]:3}
# Nova York Roma
Bash tem muitos recursos, eles apenas precisam de algum aprendizado
Os arrays no bash podem ter limitações, mas oferecem a mesma funcionalidade básica que a maioria das linguagens de programação. Embora o bash tenha historicamente suportado apenas arrays unidimensionais simples, os tempos estão mudando. A versão mais recente do bash, 4, suporta arrays associativos e indexação de arrays negativos.
Qualquer que seja a versão do bash que você esteja usando, é importante entender suas nuances. Mesmo a sintaxe de variável normal tem muitas idiossincrasias.
Variáveis Bash explicadas: um guia simples com exemplos
Leia a seguir
Tópicos relacionados
- Programação
- Linux
- Programação
- Shell Bash Linux
- Script
Sobre o autor
Bobby é um entusiasta da tecnologia que trabalhou como desenvolvedor de software por mais de duas décadas. Na MUO, ele é o Editor Júnior da seção de Programação. Ele é apaixonado por jogos, trabalha como editor-chefe na Switch Player Magazine e está imerso em todos os aspectos da publicação online e desenvolvimento web.
Assine a nossa newsletter
Junte-se à nossa newsletter para dicas de tecnologia, análises, e-books gratuitos e ofertas exclusivas!
Clique aqui para assinar