Header Ads

O que são dicionários Bash no Linux e como usá-los?

fatmawati achmad zaenuri / Shutterstock. com

Os dicionários Bash fornecem mapas hash e matrizes associativas em scripts de shell do Linux. Mostraremos como usar essas estruturas de dados poderosas e úteis em seus próprios scripts de shell do Linux.

Uma rosa com qualquer outro nome

RELACIONADOO que é o Bash Shell e por que ele é tão importante para o Linux? O nome formal dos dicionários é matrizes associativas. Eles também são chamados de tabelas de hash e mapas de hash. Eles são uma estrutura de dados que funciona de forma semelhante a uma matriz regular, mas com uma diferença significativa.

Uma matriz é uma coleção de valores de dados mantidos em uma estrutura de dados. Para acessar qualquer um dos valores de dados, que são conhecidos como elementos da matriz, você precisa saber sua posição na matriz. A posição de um elemento da matriz na matriz é conhecida como seu índice, portanto, esses tipos de matrizes são conhecidos como matrizes indexadas. Eles são o tipo de matriz mais comumente usado.

No entanto, eles têm uma desvantagem. Como você acessa um elemento da matriz se não souber sua posição na lista? Você precisa percorrer todos os elementos da matriz, testando para ver se o valor naquele local é aquele que você está procurando.

As matrizes associativas superam esse problema. Eles não usam números inteiros para identificar exclusivamente os elementos da matriz. Eles usam palavras exclusivas conhecidas como palavras-chave. Você pode recuperar o valor de um elemento da matriz usando sua palavra-chave, independentemente de onde ele esteja posicionado na matriz. Com uma matriz indexada, os números inteiros que representam as posições dentro da matriz estão em ordem crescente. As palavras-chave em uma matriz associativa podem estar em qualquer ordem.

Você pode pesquisar um valor em uma matriz associativa pesquisando com sua palavra-chave. Pesquisar uma palavra e recuperar seu valor associado simula pesquisar uma palavra em um dicionário e encontrar seu significado. É por isso que as matrizes associativas são conhecidas como dicionários.

Bash 4.0 ou superior

Matrizes associativas são suportadas no shell Bash versão 4.0 ou superior. Se você estiver usando uma distribuição Linux atual, não terá problemas. Para verificar sua versão do Bash, use este comando:

 bash - versão 

Publicidade

A máquina usada para pesquisar este artigo tem o Bash 5.1.4 instalado, então estamos prontos para prosseguir.

Princípios básicos

Para criar um array associativo na linha de comando do terminal ou em um script, usamos o comando Bash declare. A opção -A (associativa) diz ao Bash que esta será uma matriz associativa e não uma matriz indexada.

 declara acrônimos -A 

Isso cria uma matriz associativa chamada “ acrônimos. ”

Para colocar alguns dados em nossa matriz, precisamos fornecer palavras-chave e valores. Podemos fazer isso usando este formato:

 nome-matriz [chave] = Valor 

Vamos adicionar alguns elementos da matriz:

 acrônimos [ACK] = Agradecimento 

 acrônimos [BGP] = "Border Gateway Protocol" 

 acrônimos [CIDR] = "Classless Inter-Domain Routing" 

 acrônimos [DHCP] = "Protocolo de configuração de host dinâmico" 

 acrônimos [EOF] = "Fim do quadro" 

Esses comandos definem cinco elementos do array. Observe que os valores são colocados entre aspas se houver espaços no valor. Nossas palavras-chave foram inseridas em ordem alfabética, mas podem ser inseridas na ordem que você desejar. As palavras-chave devem ser exclusivas. Se você tentar criar duas entradas com a mesma palavra-chave, o segundo valor inserido substituirá o primeiro. Você ainda terá apenas uma entrada com essa palavra-chave e ela será associada ao segundo valor adicionado.

Para recuperar valores da matriz, usamos comandos neste formato:

 $ 

Publicidade

Podemos usar echo para enviar a saída para a janela do terminal:

 echo $ 

 echo $ 

Usando loops

Arrays podem ser usados ​​em loops muito bem. Matrizes associativas não são exceção. Os loops fornecem maneiras eficientes de invocar uma sequência de ações sem seções repetitivas de código. Antes de examinarmos os loops, há uma maneira eficiente de declarar matrizes.

Criamos os arrays usando o comando declare (a mesma opção -A de antes), mas fornecemos as palavras-chave e os valores como uma lista na linha de comando.

 declara países -A = ([ALB] = Albânia [BHR] = Bahrein [CMR] = Camarões [DNK] = Dinamarca [EGY] = Egito) 

O nome da matriz é “ países, ” e está conectado à lista de valores por um sinal de igual ” =. ” A lista de valores está entre parênteses “ () ” e cada palavra-chave é colocada entre colchetes “ [] “. Observe que não há vírgulas separando os valores. Se você tiver uma string de valor que contenha espaços, será necessário colocá-la entre aspas.

Para fazer uma matriz associativa retornar uma palavra-chave em vez do valor, adicione um ponto de exclamação “! ” na frente do nome da matriz. O símbolo de arroba “ @ ” pode ser usado como um caractere curinga, significando todos os elementos da matriz.

Este loop for listará todas as palavras-chave:

 para chave em "$ {! países [@]}"; faça echo $ key; feito 

Observe que as palavras-chave não estão necessariamente listadas na ordem em que foram criadas, mas isso não importa. Matrizes associativas não dependem de um índice ordenado.

Publicidade

Também podemos usar a expansão do parâmetro para listar todas as palavras-chave. Eles serão listados em uma linha, não um por linha.

 echo "$ {! países [@]}" 

 echo "$ {! acrônimos [@]}" 

Podemos aumentar nosso loop for para imprimir as palavras-chave e os valores ao mesmo tempo.

 para digitar "$ {! acrônimos [@]}"; echo "$ key - $"; feito 

Se quisermos saber quantos elementos existem nas matrizes, podemos usar um hash “ # ” na frente do nome da matriz em vez de um ponto de exclamação.

 echo "$ {! países [@]}" 

 echo "$ {! acrônimos [@]}" 

Verificando se existe um elemento Array

Se você pesquisar por uma palavra-chave, mas não houver tal elemento de matriz, o valor de retorno será uma string vazia. Às vezes, é útil ter um indicador diferente para a presença ou ausência de um elemento da matriz.

Podemos verificar a presença de um elemento de matriz usando o “ + _ ” operador. Observe que isso vem depois da palavra-chave, não antes do nome da matriz como os operadores anteriores que vimos.

 se [$]; então echo "Found"; else echo "Não encontrado"; fi 

 if [$]; então echo "Found"; else echo "Não encontrado"; fi 

O elemento da matriz com a palavra-chave “ EOF ” é encontrado na matriz, mas o elemento da matriz com a palavra-chave “ FTP ” não é.

Adicionando elementos do array

Adicionar novos elementos a uma matriz associativa é fácil. Ao contrário de algumas linguagens de programação, você não precisa definir o tamanho do seu array ao declará-lo. Você pode continuar adicionando novos elementos sem atingir um limite superior predefinido.

Publicidade

Para adicionar um novo elemento ao array, usamos o “ + = ” operador.

 países + = ([FJI] = Fiji) 

 echo "$ (# países [@]}" 

 echo $ 

O número de elementos na matriz agora é seis, e pesquisar a nova palavra-chave encontra o elemento da matriz e retorna seu valor.

Removendo elementos e matrizes da matriz

O comando unset é usado para remover elementos do array. Se a palavra-chave contiver espaços, coloque-a entre aspas.

 não definir acrônimos [EOF] 

 if [$]; então echo "Found"; else echo "Não encontrado"; fi 

Para remover a matriz inteira, use unset com o nome da matriz.

 não definir países 

Usando variáveis ​​com matrizes

Usar variáveis ​​com matrizes associativas é direto. Neste exemplo, definiremos uma chave variável para a string “ EOF. ” Usaremos a variável quando adicionarmos um novo elemento da matriz à matriz. Na verdade, estamos substituindo o elemento da matriz que excluímos anteriormente.

Recuperaremos o novo elemento da matriz chamando-o com a nova palavra-chave e também usando a variável. Se a palavra-chave contiver espaços, você precisará colocar o nome da variável entre aspas.

tecla

 = EOF 

 acrônimos [$ key] = "Fim do quadro" 

 echo $ 

 echo $ 

Seja criativo

Nossos exemplos são coleções de informações em que cada elemento do array é independente de todos os outros, como um dicionário. Cada um é uma definição única. Mas as matrizes associativas podem facilmente conter uma variedade de peças de informação, todas relacionadas a uma coisa, como as especificações de diferentes peças de hardware de computador:

 declara -A especificação 

 especificação [CPU] = "Dual Core AMD Ryzen 5 3600" 

 especificação [velocidade] = "3600 MHz" 

 especificação [Kernel] = "5.11.0-17-generic x86_64" 

 especificação [Mem] = "1978.5 MiB" 

 especificação [Armazenamento] = "32 GiB" 

 especificação [Shell] = "Bash" 

 echo $ 

Escrever com eficiência em um idioma significa conhecer os mecanismos e estruturas que ele oferece e selecionar o mais adequado para o problema que você está tentando resolver. As matrizes associativas oferecem uma maneira fácil de usar para armazenar dados que você pode pesquisar por nome, como um dicionário.

Veja Também:

Nenhum comentário