1

これに関する他の投稿があることは知っていますが、それらのいずれも機能させることができません。私の問題は、rpiでスクリプトを作成して、wifiネットワークを自動的に変更し、eth0をstaticとdhcpの間で変更したいということです。まだ終わっていません。現在、ワイヤレス部分のみを扱っています。しかし、これまでのスクリプトは次のようになっています...

#!/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コマンドを1行に配置する場合は、最初の行の終わりにある円記号を削除してください。また、これを試すときは、インターフェイスファイルのコピーを作成し、FILEをコピーの名前に設定します。sedコマンドを実行してから、コピーを元のコマンドと比較して、正しい動作を確認します。

于 2012-09-28T20:18:15.533 に答える