用于更改 WLan SSID 的 Bash 脚本

用于更改 WLan SSID 的 Bash 脚本

我是 Linux 新手,正在寻找一种简单的方法来在设定的时间更新 wlan0 接口上的 SSID 和相关密码。我需要将文件从网络“A”上的设备复制到网络“B”上的设备,并且只有一个无线接口。

我已经能够手动跟踪该过程;

更新 - /etc/netplan/50-cloud-init.yaml

申请 - sudo netplan apply

重新开始 - sudo systemctl restart systemd-networkd

地位 - sudo systemctl status systemd-networkd

但现在,我想通过 Bash 或其他方法实现自动化。我在 RasperryPi Zero 2W 上运行 Ubuntu,因此只有一个 WiFi 接口。我也尝试过连接 Netgear A6150,但尚未实现。

答案1

在您选择的任何位置复制一份/etc/netplan/50-cloud-init.yaml- 此处称为/path/to/50-cloud-init.yaml (同时此文件作为备份)

该文件的内容应如下:

version: 2
wifis:
  renderer: networkd
  wlan0:
    dhcp4: true
    optional: true
    access-points:
      SSID:
        password: PASS

这里最重要的是SSIDPASS按此处所述给出。调整内容以匹配您的特定网络配置。

然后为您的 bash 脚本创建一个文本文件,也可以将其放在任何您喜欢的位置并使其可执行 - 这里引用为/path/to/bash-script

此文件的内容应为:

#!/bin/bash

# check if script is run as root
if [[ "$EUID" -ne 0 ]]; then
    echo "Please run this script as root / with sudo."
    exit 1
fi

# assign values to $SSID and $PASS variables - you can add additional SSID and password pairs if you like.
case "$1" in
  <SSID1>)
    SSID=<SSID1>
    PASS=<PASS1>
    ;;

  <SSID2>)
    SSID=<SSID2>
    PASS=<PASS2>
    ;;
esac

# only do something if $SSID variable has been set
if [[ -n "$SSID" ]]; then

  # copy your template file into the netplan folder
  cp -f /path/to/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml

  # replace the "variables" in the netplan config file with the actual values
  sed -i "s/SSID/$SSID/;s/PASS/$PASS/" /etc/netplan/50-cloud-init.yaml

  # apply netplan config
  netplan apply

  # restart networkd
  systemctl restart systemd-networkd

else
  echo "Invalid SSID given".
  exit 1
fi

将所有的<SSIDx>和替换<PASSx>为您的实际的 SSID 和密码。

现在运行你的脚本,/path/to/bash-script并将你选择的内容SSID作为第一个参数,例如:

/path/to/bash-script <SSIDx>

这将实现您所追求的目标。

相关内容