1

我知道还有其他关于此的帖子,但我无法让它们中的任何一个工作。我的问题是我想在我的 rpi 上创建一个脚本来自动更改 wifi 网络并在静态和 dhcp 之间更改 eth0。它还没有完成我目前只在无线部分工作。但到目前为止的剧本是……

#!/bin/bash
ANS=''
ssid=''
psk=''
file='/etc/network/interfaces'

function wireless {
    echo 'The wireless network '$ssid' has now been set up'
    start
}
function ssid {
    echo 'What is your Network SSID?'
    echo -e '> \c'
    read ssid
    echo 'You entered '$ssid'. Is this correct? (y/n)'
    echo -e '> \c'
    read ANS
    if [ $ANS = 'y' ]; then
        psk
    else
        echo 'Please renter your SSID'
        ssid
    fi
}
function psk {
    echo 'What is your Network PSK?'
    echo -e '> \c'
    read psk 
    echo 'You entered '$psk'. Is this correct? (y/n)'
    echo -e '> \c'
    read ANS
        if [ $ANS = 'y' ]; then
                wireless
        else
                echo 'Please renter your PSK'
                psk
        fi

}
function start {
echo 'What do you want to do?'
echo ''
echo 'Press w to set up wireless ssid and psk'
echo 'Press s to change eth0 to a static ip address'
echo 'Press d to change eth0 to a dhcp ip address'
echo ''
echo 'Or press ctrl+c to quit'
echo -e '> \c'
read ANS
if [ $ANS = 'w' ]; then
    ssid
else
    if [ $ANS = 's' ]; then
        static
    else
        if [ $ANS = 'd' ]; then
            dhcp
        fi
    fi
fi
}
#backup of /etc/network/interfaces
#auto lo
#iface lo inet loopback
#iface eth0 inet dhcp
#iface eth0 inet static
#   address ###########
#   netmask #############
#   broadcast ###########
#   gateway ##########
#
#allow-hotplug wlan0
#
#auto wlan0
#
#iface wlan0 inet dhcp
#wpa-ssid "Home Network"
#wpa-psk "psk"
start
exit 0

所以这一切都很好,但是在无线功能中,我想将 psk 和 ssid 发送到 /etc/network/interfaces 的第 15 行和第 16 行。请有人告诉我最好的方法来做到这一点。谢谢

4

2 回答 2

2

您可以使用 sed 执行自动编辑,如下所示:

 sed -i "s/^wpa-ssid.*\$/wpa-ssid \"$ssid\"/" /etc/network/interfaces

此命令匹配任何以 wpa-ssid 开头的完整行,并将其替换为“wpa-ssid”,后跟 $ssid 变量的内容。^wpa-ssid.*\$是匹配模式。 ^表示行首,.*表示匹配任何内容,\$表示行尾。 wpa-ssid \"$ssid\"/是什么来代替它。-i 选项意味着编辑文件,而不是将结果打印到标准输出。

psk 将以相同的方式工作。

您应该考虑让您的脚本在第一次运行时备份文件。

于 2012-09-28T20:20:47.353 回答
1

如果我理解,您想将 /etc/network/interfaces 的第 15 行中的引用文本替换为 SSID 文本,并将第 16 行的引用文本替换为 PSK 文本。例如,

#wpa-ssid "Home Network"
#wpa-psk "psk"

可能会更改为

#wpa-ssid "new-Network"
#wpa-psk "new-psk"

我在您的脚本代码中没有看到您可能在哪些变量中包含新的 SSID 和 PSK 名称,但如果它们位于名为 SSID 和 PSK 以及 FILE="/etc/network/interfaces" 的变量中,您可以说:

sed -i "s/^#wpa-ssid.*/#wpa-ssid \"$SSID\"/; \
   s/^#wpa-psk.*/#wpa-psk \"$PSK\"/" $FILE

外引号是双引号,以允许 bash 变量扩展。内部双引号用反斜杠引用。如果将 sed 命令放在一行中,请删除第一行末尾的反斜杠。此外,在尝试此操作时,请复制您的接口文件并将 FILE 设置为副本的名称;运行 sed 命令,然后将副本与原始副本进行比较以检查正确的操作。

于 2012-09-28T20:18:15.533 回答