2012-09-28 30 views
1

我知道这里有其他的帖子,但我不能让他们中的任何人工作。我的问题是我想在我的rpi上创建一个脚本来自动更改wifi网络并在静态和dhcp之间更改eth0。它尚未完成我目前只在无线部分工作。但剧本至今读...如何使用Bash脚本将测试发送到某一行

#!/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,以线15和16的/ etc /网络/接口。请有人告诉我最好的方法来做到这一点。 谢谢

回答

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将以相同的方式工作。

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

+0

谢谢 - 这是一个优秀的awnser – user1205406

1

如果我明白了,您希望用SSID文本替换/ etc/network/interfaces的第15行中的带引号的文本,并用PSK文本替换第16行的引用文本。例如,

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

出现变化,以

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

我没有在你的脚本代码看看哪些变量可能会在新的SSID和PSK的名字,但如果他们在变量称为SSID和PSK,以及FILE =“/等/网络/接口”,你可以说:

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

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

相关问题