Я новичок в написании сценариев в Linux (Lubuntu), но я хотел бы создать скрипт, выполняющий работу cron, только если мой ноутбук подключен к домашнему wifi.
Возможно ли это?
Я думаю, я мог бы что-то сделать с iwconfig и вытащить ESSID оттуда с помощью grep?
До сих пор я пробовал это и, похоже, работал:
#!/bin/bash
# CRON, connected to specific WIFI
clear
netid=HOFF216
if iwconfig | grep $netid
then
clear
echo "True, we are connected to $netid"
rsync ...........
else
clear
echo "False, we are not connected to $netid"
fi
В Ubuntu 16.10 Yakkety, приложение для ядра ncl1.1 версии 1.2.4, результат выглядит иначе. В итоге я использовал следующее:
essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit
Я предлагаю запустить сценарий cronjob безоговорочно (т. е. независимо от того, подключен ли к Wi-Fi или нет). Сам сценарий будет проверять сеть Wi-Fi и выйти, если вы не подключены к правильному.
Чтобы проверить, к какой сети вы подключены, я бы предложил использовать nmcli
. Он выведет что-то вроде:
[jk@pororo ~]$ nmcli dev wifi list SSID BSSID MODE FREQ RATE SIGNAL SECURITY ACTIVE 'other-network' <bssid-1> Infrastructure 2412 MHz 54 MB/s 32 WPA WPA2 no 'some-other-network' <bssid-2> Infrastructure 2412 MHz 54 MB/s 25 WEP no 'my-network' <bssid-3> Infrastructure 2462 MHz 54 MB/s 99 WPA2 yes
Чтобы создать сценарий, я бы предложил что-то вроде:
# extract the essid from nmcli output
essid=$(nmcli dev wifi list | sed -n "s/^'\([^']*\)'.*yes\s*$/\1/p")
# check for my-network, exit otherwise
[ "$essid" == "my-network" ] || exit
# now we know we're connected to my-network
Я предлагаю запустить сценарий cronjob безоговорочно (т. е. независимо от того, подключен ли к Wi-Fi или нет). Сам сценарий будет проверять сеть Wi-Fi и выйти, если вы не подключены к правильному.
Чтобы проверить, к какой сети вы подключены, я бы предложил использовать nmcli
. Он выведет что-то вроде:
[jk@pororo ~]$ nmcli dev wifi list SSID BSSID MODE FREQ RATE SIGNAL SECURITY ACTIVE 'other-network' <bssid-1> Infrastructure 2412 MHz 54 MB/s 32 WPA WPA2 no 'some-other-network' <bssid-2> Infrastructure 2412 MHz 54 MB/s 25 WEP no 'my-network' <bssid-3> Infrastructure 2462 MHz 54 MB/s 99 WPA2 yes
Чтобы создать сценарий, я бы предложил что-то вроде:
# extract the essid from nmcli output
essid=$(nmcli dev wifi list | sed -n "s/^'\([^']*\)'.*yes\s*$/\1/p")
# check for my-network, exit otherwise
[ "$essid" == "my-network" ] || exit
# now we know we're connected to my-network
В Ubuntu 16.10 Yakkety, приложение для ядра ncl1.1 версии 1.2.4, результат выглядит иначе. В итоге я использовал следующее:
essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit
Я предлагаю запустить сценарий cronjob безоговорочно (т. е. независимо от того, подключен ли к Wi-Fi или нет). Сам сценарий будет проверять сеть Wi-Fi и выйти, если вы не подключены к правильному.
Чтобы проверить, к какой сети вы подключены, я бы предложил использовать nmcli
. Он выведет что-то вроде:
[jk@pororo ~]$ nmcli dev wifi list SSID BSSID MODE FREQ RATE SIGNAL SECURITY ACTIVE 'other-network' <bssid-1> Infrastructure 2412 MHz 54 MB/s 32 WPA WPA2 no 'some-other-network' <bssid-2> Infrastructure 2412 MHz 54 MB/s 25 WEP no 'my-network' <bssid-3> Infrastructure 2462 MHz 54 MB/s 99 WPA2 yes
Чтобы создать сценарий, я бы предложил что-то вроде:
# extract the essid from nmcli output
essid=$(nmcli dev wifi list | sed -n "s/^'\([^']*\)'.*yes\s*$/\1/p")
# check for my-network, exit otherwise
[ "$essid" == "my-network" ] || exit
# now we know we're connected to my-network
В Ubuntu 16.10 Yakkety, приложение для ядра ncl1.1 версии 1.2.4, результат выглядит иначе. В итоге я использовал следующее:
essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit
Я предлагаю запустить сценарий cronjob безоговорочно (т. е. независимо от того, подключен ли к Wi-Fi или нет). Сам сценарий будет проверять сеть Wi-Fi и выйти, если вы не подключены к правильному.
Чтобы проверить, к какой сети вы подключены, я бы предложил использовать nmcli
. Он выведет что-то вроде:
[jk@pororo ~]$ nmcli dev wifi list SSID BSSID MODE FREQ RATE SIGNAL SECURITY ACTIVE 'other-network' <bssid-1> Infrastructure 2412 MHz 54 MB/s 32 WPA WPA2 no 'some-other-network' <bssid-2> Infrastructure 2412 MHz 54 MB/s 25 WEP no 'my-network' <bssid-3> Infrastructure 2462 MHz 54 MB/s 99 WPA2 yes
Чтобы создать сценарий, я бы предложил что-то вроде:
# extract the essid from nmcli output
essid=$(nmcli dev wifi list | sed -n "s/^'\([^']*\)'.*yes\s*$/\1/p")
# check for my-network, exit otherwise
[ "$essid" == "my-network" ] || exit
# now we know we're connected to my-network
В Ubuntu 16.10 Yakkety, приложение для ядра ncl1.1 версии 1.2.4, результат выглядит иначе. В итоге я использовал следующее:
essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit
Я предлагаю запустить сценарий cronjob безоговорочно (т. е. независимо от того, подключен ли к Wi-Fi или нет). Сам сценарий будет проверять сеть Wi-Fi и выйти, если вы не подключены к правильному.
Чтобы проверить, к какой сети вы подключены, я бы предложил использовать nmcli
. Он выведет что-то вроде:
[jk@pororo ~]$ nmcli dev wifi list SSID BSSID MODE FREQ RATE SIGNAL SECURITY ACTIVE 'other-network' <bssid-1> Infrastructure 2412 MHz 54 MB/s 32 WPA WPA2 no 'some-other-network' <bssid-2> Infrastructure 2412 MHz 54 MB/s 25 WEP no 'my-network' <bssid-3> Infrastructure 2462 MHz 54 MB/s 99 WPA2 yes
Чтобы создать сценарий, я бы предложил что-то вроде:
# extract the essid from nmcli output
essid=$(nmcli dev wifi list | sed -n "s/^'\([^']*\)'.*yes\s*$/\1/p")
# check for my-network, exit otherwise
[ "$essid" == "my-network" ] || exit
# now we know we're connected to my-network
В Ubuntu 16.10 Yakkety, приложение для ядра ncl1.1 версии 1.2.4, результат выглядит иначе. В итоге я использовал следующее:
essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit
В Ubuntu 16.10 Yakkety, приложение для ядра ncl1.1 версии 1.2.4, результат выглядит иначе. В итоге я использовал следующее:
essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit
Я предлагаю запустить сценарий cronjob безоговорочно (т. е. независимо от того, подключен ли к Wi-Fi или нет). Сам сценарий будет проверять сеть Wi-Fi и выйти, если вы не подключены к правильному.
Чтобы проверить, к какой сети вы подключены, я бы предложил использовать nmcli
. Он выведет что-то вроде:
[jk@pororo ~]$ nmcli dev wifi list SSID BSSID MODE FREQ RATE SIGNAL SECURITY ACTIVE 'other-network' <bssid-1> Infrastructure 2412 MHz 54 MB/s 32 WPA WPA2 no 'some-other-network' <bssid-2> Infrastructure 2412 MHz 54 MB/s 25 WEP no 'my-network' <bssid-3> Infrastructure 2462 MHz 54 MB/s 99 WPA2 yes
Чтобы создать сценарий, я бы предложил что-то вроде:
# extract the essid from nmcli output
essid=$(nmcli dev wifi list | sed -n "s/^'\([^']*\)'.*yes\s*$/\1/p")
# check for my-network, exit otherwise
[ "$essid" == "my-network" ] || exit
# now we know we're connected to my-network
Основываясь на вашей работе, я использую в своем скрипте следующее:
# Check if we are home
essid=`nmcli con status|grep <ESSID>|awk '{print $1}'`
[ "$essid" = "<ESSID>" ] || exit
В Ubuntu 16.10 Yakkety, приложение для ядра ncl1.1 версии 1.2.4, результат выглядит иначе. В итоге я использовал следующее:
essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit
Я предлагаю запустить сценарий cronjob безоговорочно (т. е. независимо от того, подключен ли к Wi-Fi или нет). Сам сценарий будет проверять сеть Wi-Fi и выйти, если вы не подключены к правильному.
Чтобы проверить, к какой сети вы подключены, я бы предложил использовать nmcli
. Он выведет что-то вроде:
[jk@pororo ~]$ nmcli dev wifi list SSID BSSID MODE FREQ RATE SIGNAL SECURITY ACTIVE 'other-network' <bssid-1> Infrastructure 2412 MHz 54 MB/s 32 WPA WPA2 no 'some-other-network' <bssid-2> Infrastructure 2412 MHz 54 MB/s 25 WEP no 'my-network' <bssid-3> Infrastructure 2462 MHz 54 MB/s 99 WPA2 yes
Чтобы создать сценарий, я бы предложил что-то вроде:
# extract the essid from nmcli output
essid=$(nmcli dev wifi list | sed -n "s/^'\([^']*\)'.*yes\s*$/\1/p")
# check for my-network, exit otherwise
[ "$essid" == "my-network" ] || exit
# now we know we're connected to my-network
nmcli dev list iface eth1
или iw dev eth1 link
(заменив eth1
на соответствующий интерфейс).
– James Henstridge
14 June 2012 в 06:07
nmcli dev list
немного сложнее, так как вам нужно найти активную точку доступа. nm dev wifi list
выглядит многообещающим, но я буду обновлять его.
– Jeremy Kerr
14 June 2012 в 06:28
nmcli -t -f name con show --active
. Это даст вам список сетевых имен, которые активны без какой-либо другой посторонней информации. Объедините с grep -q
.
– Robie Basak
2 February 2017 в 03:48