Я новичок в написании сценариев в Linux (Lubuntu), но я хотел бы создать сценарий, который запускает работу cron, только если мой ноутбук подключен к моему домашнему Wi-Fi.
Возможно ли это?
Полагаю, я мог бы что-то сделать с iwconfig и вытащить ESSID оттуда с помощью grep?
Пока я пробовал это, и похоже, что это работает: 114]
#!/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
Я бы предложил запустить скрипт 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, версия инструмента 1.2c nmcli, вывод выглядит иначе. Я закончил тем, что использовал следующее:
essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit