С помощью iw
У меня нет nm-tool
установлен, поэтому я использую iw
.
Эта команда сортирует точки доступа по уровню сигнала, сначала самый сильный:
sudo iw dev wlan0 scan | egrep "signal:|SSID:" | sed -e "s/\tsignal: //" -e "s/\tSSID: //" | awk '{ORS = (NR % 2 == 0)? "\n" : " "; print}' | sort
Каждая команда объясняла:
iw dev wlan0 scan
: Поиск точек доступа, доступных через интерфейс wlan0
egrep "signal:|SSID:"
: Получить линии с уровнем сигнала и идентификаторами SSID из iw
это выход. Теперь результат выглядит следующим образом:
signal: -77.00 dBm SSID: nameOfAccessPoint1 signal: -71.00 dBm SSID: nameOfAccessPoint2
sed -e "s/\tsignal: //" -e "s/\tSSID: //"
: Уменьшить egrep
вывод на этот:
-77,00 дБм nameOfAccessPoint1-71,00 дБм nameofaccesspoint2
awk '{ORS = (NR % 2 == 0)? "\n" : " "; print}'
: Выведите уровень сигнала и SSID на одну линию. Более конкретно, когда номер строки (NR
) является четным, т.е. мы находимся на строке, показывающей точку доступа, разделитель выходных записей (ORS
) должен быть разрыв строки. В противном случае мы находимся на линии, содержащей уровень сигнала, поэтому мы присоединяемся к линии, делая ORS
простое пространство.
Если мы sort
на этом выходе мы получаем список уровней сигнала и точек доступа, показывающий точку доступа с самым сильным сигналом сверху:
-71.00 dBm nameOfAccessPoint2-77.00 dBm nameOfAccessPoint1
Внимание: Некоторые точки доступа могут иметь расширенные возможности: Расширенные возможности: * Список SSID
Итак, grepping "SSID:" вместо "SSID" помогает избежать этого дополнительного вывода, который в противном случае привел бы к сбою команды.