Shell-Script

將 WPA_passphrase 輸出轉換為 /etc/network/interface

  • August 31, 2018

這主要是我無法很好解決的格式問題。

我想創建一個 bash 函式或腳本,將 wpa-passphrase 的輸出轉換為 /etc/network/interfaces 可以使用的格式。

範例 WPA 請求者

wpa_passphrase ssid password

產生以下輸出

network={
   ssid="MYSSID"
   #psk="passphrase"
   psk=ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b
}

我需要將該輸出轉換為 /etc/network/interfaces 可以使用的格式

/etc/network/interface 輸出格式範例:

auto wlan0
iface wlan0 inet dhcp
       wpa-ssid MYSSID
       wpa-psk ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b

我的第一個粗略解決方案是使用:

wpa_passphrase MYSSID PASSWORD |grep -E 'ssid|psk' |grep -v "#psk" |cut -d '=' -f 2

這給了我:

MYSSID
ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b

但我不知道如何將這些行中的每一行放到 /etc/network/interfaces 格式中的正確位置

更新:使用我目前的解決方案

經過進一步的嘗試,我設法讓它與這個一起工作:

while read line
do
       echo "auto wlp3s0"
       echo "iface wlp3s0 inet dhcp"           
       echo -e "\t wpa-ssid $line"
done < <(sudo wpa_passphrase $1 $2 |grep -E 'ssid' |cut -d '=' -f 2)

while read line
do
       echo -e "\t wpa-psk $line"
done < <(sudo wpa_passphrase $1 $2 |grep -E 'psk' |grep -v "#psk" |cut -d '=' -f 2)

我的解決方案提供了我需要的輸出,但它似乎效率不高,我仍然希望看到其他解決方案。

您可以製作如下函式並根據awk需要使用格式化輸出:

generate() {
sudo wpa_passphrase "$1" "$2" | 
awk -F= 'BEGIN      { print "auto wlan0\n" "iface wlan0 inet dhcp" }
        /ssid/     { print "", "wpa-ssid", $2 }
        /[^#]psk=/ { print "", "wpa-psk" , $2 }' OFS='\t'
}

然後呼叫generate "my SSID" "PASSWORD"

輸出將是:

auto wlan0
iface wlan0 inet dhcp
       wpa-ssid        "my SSID"
       wpa-psk ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b

引用自:https://unix.stackexchange.com/questions/465405