Como armazenar uma variável que seja incrementada pelo índice?

0

Sou muito novo em programação e queria saber como armazenar e imprimir as variáveis que estão sendo incrementadas no bash.

#!/bin/bash
ethcounter=$(ifconfig -a | egrep --count "eth")
ethindex0=$((ethcounter-1))

echo ethindex0 = $ethindex0

for ((i=0; i<=ethindex0; i++))
 do
    eth[$i]=$(ifconfig eth$i)
    echo "eth[$i]" = "$eth[$i]"
 done

O objetivo final aqui é armazenar o endereço IP de cada dispositivo de eth que eu possa ver quando executo o ifconfig.

eth0 = ifconfig eth0 ... IP address
eth1 = ifconfig eth1 ... IP address

Eu precisaria de uma maneira de manipular a saída de ifconfig para armazenar o endereço IP também. Qual é a melhor maneira de conseguir isso?

    
por WeSC 15.01.2016 / 01:31

1 resposta

2

Você não precisa de muito para fazer isso, basta declarar eth variable como uma matriz (e alterar a maneira como ele é acessado):

#!/bin/bash
ethcounter=$(ifconfig -a | egrep --count "eth[0-9]+")
ethindex0=$((ethcounter-1))
declare -a eth

echo ethindex0 = $ethindex0

for ((i=0; i<=ethindex0; i++))
 do
    eth[$i]=$(ifconfig eth$i)
    echo "eth[$i]" = "${eth[$i]}"
 done

Eu também ajustei levemente o parâmetro egrep , fazendo com que as linhas correspondentes contenham a palavra 'ether'. Claro que provavelmente precisa de mais do que isso, mas você pode tentar descobrir por conta própria.

Como jordanm observou corretamente nos comentários: não presuma que as interfaces sejam numeradas sequencialmente. Você deve, em vez disso, grep fora o que você quer, e processar todos os valores que você tem, e armazená-los em uma matriz associativa (indexada por nomes de interface em vez de números).

Nota lateral: A interface pode ter mais de um endereço IP. Isso, e ifconfig entrando em depreciação, pode encorajá-lo a usar ip , especialmente ip addr - como neste caso é suportado lá.

    
por 15.01.2016 / 01:46

Tags