Как извлечь данные 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