Цикл хотя предпочитал беспроводную сеть для удаления - PullRequest
0 голосов
/ 09 апреля 2019

Попытка написать скрипт, который будет зацикливаться на моих любимых беспроводных сетях и удалять все, кроме моей домашней сети Wi-Fi.У меня есть несколько рабочий скрипт, но проблема в том, что когда он попадает в домашнюю сеть, он застревает.Поскольку он не удаляется из списка при повторном цикле, он продолжает использовать этот SSID до тех пор, пока не завершатся сценарии.

Я знаю, что проблемы связаны с тем, как я получаю имя сети, но я не могу придумать другой способчтобы получить его и правильно отформатировать, чтобы его можно было добавить в список / массив.

#!/bin/bash

WIFIDEIVCE=$(networksetup -listallhardwareports | grep "Wi-Fi" -1 | tail -1 | awk '{print $2}'
NETWORKLISTCOUNT=$(networksetup -listpreferredwirelessnetworks ${WIFIDEIVCE} | wc -l)


for (( i = 0; i < $NETWORKLISTCOUNT -1; i++ )); do
  NETWORKNAME=$(networksetup -listpreferredwirelessnetworks ${WIFIDEIVCE} | tail -1 | awk '{$1=$1};1' )
  if [ "$NETWORKNAME" != "home_wifi" ]; then
    networksetup -removepreferredwirelessnetwork ${WIFIDEIVCE} "$NETWORKNAME"
  else
    echo "Network is $NETWORKNAME and will not be removed"
  fi
done

Есть ли еще кто-то, кто хочет получить данные из listpreferredwirelessnetworks в надлежащий список / массив, чтобы их можно было зациклить, хотя и правильно обрабатывать исключение для удаления?

1 Ответ

1 голос
/ 09 апреля 2019

Вместо того, чтобы использовать переменную управления циклом "i", просто переберите все результаты.Мы можем использовать grep -v, чтобы исключить «home_wifi» из списка.

Возможно, нам следует использовать время и чтение, чтобы разрешить сетевые имена с пробелами, но вот версия цикла for, чтобы показать вам другой способиспользуйте для циклов.

#!/bin/bash

WIFIDEIVCE=$(networksetup -listallhardwareports | grep "Wi-Fi" -1 | tail -1 | awk '{print $2}')


for NETWORKNAME in $( networksetup -listpreferredwirelessnetworks ${WIFIDEIVCE} | tail -n+2 | grep -v home_wifi )
do
  echo networksetup -removepreferredwirelessnetwork ${WIFIDEIVCE} "$NETWORKNAME"
done

Вот тот же код, организованный в цикле while, чтобы избежать проблем при наличии пробелов в именах вашей сети:

#!/bin/bash

WIFIDEIVCE=$(networksetup -listallhardwareports | grep "Wi-Fi" -1 | tail -1 | awk '{print $2}')


networksetup -listpreferredwirelessnetworks ${WIFIDEIVCE} | tail -n+2 | grep -v home_wifi  |
while
  read NETWORKNAME
do
  echo networksetup -removepreferredwirelessnetwork ${WIFIDEIVCE} "$NETWORKNAME"
done

Я оставил 'echo'в коде, чтобы избежать проблем для других читателей, которые могут скопировать и вставить этот код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...