我是 Linux(Lubuntu)脚本编写的新手,但我想编写一个脚本,仅当我的笔记本电脑连接到家里的 wifi 时才运行 cron 作业。
这可能吗?
我想,我可以使用 iwconfig 做一些事情,然后使用 grep 从那里提取 ESSID?
到目前为止,我尝试了这个并且似乎有效:
#!/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
答案1
我建议无条件地运行 cronjob 脚本(即,不管您是否连接到 wifi)。然后脚本本身会检查 wifi 网络,如果您没有连接到正确的网络,则退出。
要检查你连接到哪个网络,我建议使用nmcli
。它将输出类似以下内容的内容:
[jk@pororo ~]$ nmcli dev wifi 列表 SSID BSSID 模式 频率 速率 信号安全 活动 '其他网络' <bssid-1> 基础设施 2412 MHz 54 MB/s 32 WPA WPA2 否 ‘some-other-network’ <bssid-2> 基础设施 2412 MHz 54 MB/s 25 WEP 否 'my-network' <bssid-3> 基础设施 2462 MHz 54 MB/s 99 WPA2 是
为了编写这个脚本,我建议这样做:
# 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
答案2
根据您的工作,我现在在脚本中使用以下内容:
# Check if we are home
essid=`nmcli con status|grep <ESSID>|awk '{print $1}'`
[ "$essid" = "<ESSID>" ] || exit
答案3
在 Ubuntu 16.10 Yakkety、nmcli 工具版本 1.2.4 上,输出看起来有所不同。我最终使用了以下内容:
essid=$(nmcli dev wifi list | tail -n +2 | sed -n -e /^*/p | awk -F ' ' '{print $2}')
[ "$essid" == "<ESSID>" ] || exit