Как извлечь данные MAC из grep и вставить в bash

Я пытаюсь извлечь MAC-адрес для беспроводной карты, а затем вставить его в скрипт bash как переменную VAR с постепенным изменением. Так..

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

Теперь мне нужно из командной строки извлечь только XX: xx: XX: xx: XX: xx и добавить его в скрипт с +1 VAR . Что кажется довольно простым, если я могу извлечь только XX: xx: XX: xx: XX: xx из grep выше. (т.е. как увеличить переменную в bash?)

Кто-нибудь может увидеть препятствие для добавления MAC-адреса в качестве переменной в скрипте bash? т. е. не думая о bash, MAC - это вычисление строки или ошибочная команда?

3 ответа

Может быть легче прочитать MAC из соответствующего файла в sys файловая система. Если вы вызываете вашу переменную mymac, то:

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

Должно сработать

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

Можно было бы увеличить значение последних цифр с помощью небольшого количества манипуляций с переменными. Это будет работать, только если они обе цифры со значением 98 или меньше. В следующем примере используется предполагаемое значение MAC 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

Эта статья о переполнении стека представляет собой переносимое решение (оно будет работать на Unix, как правило, а не только на Ubuntu) и должно обеспечивать отказоустойчивость, если выходной формат ifconfig изменения ( или если он устарел / удален, и вы решили переключиться на другой инструмент).

ifconfig wlan1 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'

Вам нужно добавить больше команд для извлечения только MAC-адреса.

Я предлагаю вам использовать awk и печатать только последний столбец, пример:

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

Эта команда будет отображать только XX:xx:XX:xx:XX:xx, awk, печатать разделенные на 5 $ строки.

Если вы хотите добавить этот результат в переменную bash, вам нужно применить эту команду:

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

Затем вы используете этот контент с $ myVarName.

echo $myVarName
XX:xx:XX:xx:XX:xx
Другие вопросы по тегам