get_channel()
{
local wifidev="$1"
set -- $(iw dev "$wifidev" info)
# e.g. 'Interface wlan0 ifindex 6 wdev 0x2 addr 10:6f:3f:0e:31:8e type IBSS wiphy 0 channel 11 (2462 MHz) NO HT'
case "[email protected]" in
*" channel "*)
while [ "$1" != "channel" ]; do shift; done
echo "$2"
;;
*)
return 1
;;
esac
}
看起來很複雜。我希望在單詞「channel」後面有數字, 沒有sed或awk。有沒有可能是便攜式8-)括號膨脹到 只是有「通道」後一句話,是這樣的:在字符串中的特定單詞之後捕捉單詞並帶有-ash
channel="${@#*channel }"
set -- $channel
echo $1
也許甚至有一個更好的辦法?
編輯:建議之後,我們使用這種方法現在:
set -- $(iw dev "$dev" info)
mychan="[email protected]"
mychan="${mychan#*channel }"
case "$mychan" in
[0-9]*)
echo "${mychan%% *}"
;;
esac
它是快速和安全的足夠的(+便攜式) - 但也許甚至有一個漂亮的一個?
這就是相當不錯的位置參數。您需要在第二個括號擴展後刪除數字,即'channel = $ {channel %% *}'。祝你好運。 – shellter
你最好做'案「$ *」在...''因爲「$ @」'擴展到多個字,並導致語法錯誤的case語句 –
你是正確的(雖然在這個階段,它已經消毒 - 但它並沒有傷害更好地做到這一點) –