como extrair dados MAC do grep e inserir no bash

0

Estou tentando extrair o endereço MAC de uma placa sem fio e inseri-la em um script bash como uma variável VAR com uma alteração incremental. Então ..

$ ifconfig wlan1 | grep HWaddr
wlan1     Link encap:Ethernet  HWaddr XX:xx:XX:xx:XX:xx

Agora eu preciso da linha de comando extrair apenas o XX: xx: XX: xx: XX: xx e adicioná-lo ao script com +1 VAR. O que parece bem direto se eu conseguir extrair apenas o XX: xx: XX: xx: XX: xx do grep acima. (ou seja, Como incrementar uma variável no bash? )

Alguém pode ver um obstáculo para adicionar um endereço MAC como uma variável em um script bash? ou seja, sem bash pensar o MAC é um cálculo de seqüência de caracteres ou comando errôneo?

    
por doubt 08.12.2016 / 15:13

3 respostas

2

Pode ser mais fácil ler o MAC do arquivo apropriado dentro do sistema de arquivos sys . Se você chamar sua variável mymac, então:

$ mymac=$(cat /sys/class/net/wlan1/address)

Deve funcionar

$ echo "mymac"
XX:xx:XX:xx:XX:xx

Seria possível incrementar o valor dos últimos dígitos com um pouco de manipulação de variáveis. Isso só funcionará se forem dois dígitos com um valor de 98 ou menos. O exemplo a seguir usa um MAC assumido de 52: 1c: 53: 8b: 8f: 77.

$ endpair=${mymac##*:}
$ ((endpair++))
$ newmac="${mymac%:*}:${endpair}"
$ echo "Hooray $mymac is now $newmac"
Hooray 52:1c:53:8b:8f:77 is now 52:1c:53:8b:8f:78
    
por Arronical 08.12.2016 / 15:58
1

Este post no Stack Overflow oferece uma solução portátil (ele funcionará no Unix, geralmente, não apenas no Ubuntu) e deve fornecer resiliência se o formato de saída de ifconfig for alterado ( ou se estiver obsoleto / removido e você decidir alterar para uma ferramenta diferente).

ifconfig wlan1 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'
    
por John N 08.12.2016 / 16:01
0

Você precisa adicionar mais comandos para extrair apenas o endereço MAC.

Eu sugiro que você use o awk e imprima apenas a última coluna, exemplo:

ifconfig wlan1 | grep HWaddr | awk '{ print $5 }'

Este comando mostrará apenas XX: xx: XX: xx: XX: xx, awk imprime $ 5 linhas separadas por espaços.

Se você quiser adicionar este resultado na variável bash, você precisa aplicar este comando:

myVarName=$(ifconfig wlan1 | grep HWaddr | awk '{ print $5 }')

Depois, você usa esse conteúdo com $ myVarName.

echo $myVarName
XX:xx:XX:xx:XX:xx
    
por Vinicius Miqueloti 08.12.2016 / 15:35