Armbian切换Wifi

发布时间:2023年12月18日

找了个盒子刷了Armbian,主要有两个作用,一个是做离线下载和SMB。另外一个作用是用来搞打印服务器,因为家里角落比较多,因此有两个路由器信号,而打印机所在的位置的wifi信号,外网速度并不好,因此想到平时盒子做下载机,就把盒子放到角落A,需要打印就把盒子放到角落B,然而不管是在角落A还是在角落B,两个wifi信号都可以接受到,但是我发现Armbian并不能主动切换到wifi信号更好的热点,因此写一个脚本来切换wifi

#!/bin/bash

# 我的两个wifi的密码都一样
wifi_pwd="xxxxxx"

# 定义函数查询热点信号,参数是wifi ssid
get_wifi_signal() {
  local ssid=$1
  echo "获取wifi:$ssid的信号情况"
  wifi_signal=''
  #一个wifi名称,可能对应两项(5G/2.4G),awk同时过滤掉已经连接上的
  connect_status=$(nmcli dev wifi list | grep $ssid | awk 'NR==1 {print $1}')
  if [ connect_status != '*' ];then
    wifi_signal=$(nmcli dev wifi list | grep $ssid | awk 'NR==1 {print $7}')
  else
    # 说明当前行wifi是连接上的
    wifi_signal=$(nmcli dev wifi list | grep $ssid | awk 'NR==1 {print $8}') 
  fi
  # 注意定义函数返回值时echo和return的区别和调用函数获取返回值的区别
  return $wifi_signal
}

# 定义切换wifi函数
switch_wifi() {
 # 查询两个热点的信号
 get_wifi_signal yun
 # 获取函数上一步的操作结果
 yun_signal=$?
 get_wifi_signal ap
 ap_signal=$?
 echo "搜到的热点信号强度[ap=$ap_signal , yun=$yun_signal]"
 # 查看当前连接的热点名称
 current_conn=$(nmcli device status | grep wlan0 | grep -v disconnected | awk '{print $4}')

 if [ $current_conn = 'ap' ]; then
  echo '当前连接的热点是[ap],判断当前热点信号强度是否小于[yun],如果小于切换到yun热点'
  if [ $ap_signal -lt $yun_signal ]; then
   echo '当前连接的热点信号小于另一个热点信号,切换到另一个热点'
   nmcli device wifi connect yun password $wifi_pwd
  fi
 elif [ $current_conn = 'yun' ]; then
  echo '当前连接的热点是[yun],判断当前热点信号强度是否小于[ap],如果小于切换到ap热点'
  if [ $yun_signal -lt $ap_signal ]; then
   echo '当前连接的热点信号小于另一个热点信号,切换到另一个热点'
   nmcli device wifi connect ap password $wifi_pwd
  fi
 else
   echo '当前未连接任何热点'  
 fi
}


#############Main###########
while true; do
 echo "=======$(date +"%Y-%m-%d %H:%M:%S")开始执行热点检测,确保连上信号最好的热点======"
 # 检测是否有指定的两个或以上热点(考虑双频合一)
 wifi_count=`nmcli dev wifi list | grep -E 'yun|ap' | wc -l`
 #使用==进行字符串比较时,它区分大小写。如果不区分大小写的比较,可以使用=操作符
 if [ wifi_count = 1 ]; then
  echo '只搜索到一个热点,不再处理'
 else
  switch_wifi
 fi
 sleep 600
done

把脚本放到crontab中执行就可以了,可以使用crontab中可以使用@reboot关键字

文章来源:https://blog.csdn.net/kanyun123/article/details/135072082
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。