會員 ![]() | Shell Script 求教 語法: root@OpenWrt:~# iwlist ath0 scan | grep -B 5 "Encryption key:off" Cell 01 ... Cell 02 - Address: 00:11:22:33:44:55 ESSID:"WI FLY" Mode:Master Frequency:2.412 GHz (Channel 1) Quality=34/70 Signal level=-62 dBm Noise level=-95 dBm Encryption key:off Cell 03 以上是掃描無線基地台的結果再經過grep 篩選後的一部分, 目的是想要找出未加密基地台之中, 訊號最強者的ESSID (可能包含空白), 其他則不重要, 訊號強度為Quality 之後的數字, 以上例為34, 實際可能是1~2 位數, 此外Script 必須能在OpenWrt 之中執行, 而OpenWrt 所支援的指令並不多, 大概基本的grep, awk, sed, sort, find, head, tail 等應該沒問題, 小弟對於shell script 不內行, 尤其關鍵字Quality 和ESSID 分散在不同行, 而Quality 可能是個位數或兩位數: 語法: root@OpenWrt:~# wlanconfig ath0 list scan SSID BSSID CHAN RATE S:N INT CAPS aaa 00:aa:bb:bb:dd:ee 1 54M 2:0 100 EPSs WI FLY 00:11:22:33:44:55 1 54M 34:0 100 EPSs WPA bbb 01:23:45:67:89:ab 5 54M 12:0 100 EPSs RSN WPA WME wlanconfig 輸出雖然將SSID 和S:N 放在同一行, 但無法看出是否加密, 此外wlanconfig 和iwlist 掃描結果不一定相同, 所以只能提供參考 小弟不知道該如何排序, 請網友大力協助或給小弟一點提示, 謝謝 此篇文章於 2011-01-30 06:53 PM 被 FYI 編輯。. 原因: Encryption key:off |
回覆 |
會員 ![]() | 回覆: Shell Script 求教 把 五行合併 sed -e :a -e "$!N;s/\n\(.*\)/\1 /;ta" -e "P;D" |
回覆 |
會員 ![]() | 回覆: Shell Script 求教 type 1.txt |grep -B 5 "Encryption key\:off" | sed -e :a -e "$!N;s/\n\(.*\)/\1 /;ta" - "P;D" | gawk "NF == 21 {print $6,$7,$13;}; NF == 20 {print $6,$12;}" ESSID:"WIFLY" Quality=34/70 type 1.txt |grep -B 5 "Encryption key\:off" | sed -e :a -e "$!N;s/\n\(.*\)/\1 /;ta" - "P;D" | gawk "NF == 21 {print $6,$7,$13;}; NF == 20 {print $6,$12;}" ESSID:"WI FLY" Quality=34/70 |
回覆 |
會員 ![]() | 感謝bx2aa 兄的熱心協助, 先前的範例只是為了方便說明, 其實還可以更精簡, 為了便於測試, 小弟把過濾條件 "Encryption key:off" 暫時改成 "Encryption key:on", 輸出範例如下: 語法: root@OpenWrt:~# iwlist ath0 scan | grep -B 4 'Encryption key:on' | grep -E 'ESSID:|Quality=' ESSID:"aaa" Quality=2/70 Signal level=-93 dBm Noise level=-95 dBm ESSID:"FON_AP" Quality=34/70 Signal level=-62 dBm Noise level=-95 dBm ESSID:"bbb" Quality=12/70 Signal level=-83 dBm Noise level=-95 dBm 接著再以sed & sort 排列出所要的結果: 語法: root@OpenWrt:~# iwlist ath0 scan | grep -B 4 'Encryption key:on' | grep -E 'ESSID:|Quality=' | sed -e '$!N;s/\n//' -e '/Quality=[0-9]\//s/=/=0/' -e 's/^.*\"\(.*\)\".*y=\(.*\)\/.*$/\2 \1/' | sort -r 34 FON_AP 12 bbb 02 aaa 最後以head & sed 找出訊號最強的AP 語法: root@OpenWrt:~# iwlist ath0 scan | grep -B 4 'Encryption key:on' | grep -E 'ESSID:|Quality=' | sed -e '$!N;s/\n//' -e '/Quality=[0-9]\//s/=/=0/' -e 's/^.*\"\(.*\)\".*y=\(.*\)\/.*$/\2 \1/' | sort -r | head -n 1 | sed 's/^...//' FON_AP bx2aa 兄若有興趣的話不妨也玩一玩, 小弟最終目的是要弄一個Universal Wireless Repeater, 目前還在前置作業的階段 謝謝收看 此篇文章於 2011-01-31 02:00 PM 被 FYI 編輯。. 原因: sed 's/^...//' |
回覆 |
會員 ![]() | 由於平常除了回答OpenWrt/DD-WRT 問題之外, 小弟幾乎不會用到Linux, 所以小弟其實並不熟悉Linux, 所懂的也僅止於可能會用到的部份, 對於sed & awk 就更不熟悉了, 這次惡補sed 語法讓小弟產生一些疑問:
語法: aaa 02 FON_AP 34 bbb 12 語法: aaa Quality=2/70 Signal level=-93 dBm Noise level=-95 dBm FON_AP Quality=34/70 Signal level=-62 dBm Noise level=-95 dBm bbb Quality=12/70 Signal level=-83 dBm Noise level=-95 dBm 此篇文章於 2011-04-18 04:36 PM 被 FYI 編輯。. |
回覆 |
會員 ![]() | 回覆: Shell Script 求教 語法: type 2.txt ESSID:"aaa" Quality=2/70 Signal level=-93 dBm Noise level=-95 dBm ESSID:"FON_AP" Quality=34/70 Signal level=-62 dBm Noise level=-95 dBm ESSID:"bbb" Quality=12/70 Signal level=-83 dBm Noise level=-95 dBm 34 FON_AP type 2.txt | sed -e "$!N;s/\n\(.*\)/\1/g" | gawk "{print $2,$1}" | sed -e "s/Quality=\(.*\)\/70 ESSID\:\"\(.*\)\"/\2 \1/g;" | sort -r -k 2 | head -n 1 FON_AP 34 |
回覆 |
會員 ![]() | 忘了說明小弟找不到Fon 可用的gawk, 不過改用awk 倒也沒問題 "sort -r -k 2" 又學到一招! 謝了! 只不過無法排除飯店的SSID 包含空白的可能性, 為了安全起見, 小弟還是選擇把Quality 放前面再排序 此外, 乍看bx2aa 兄的語法並未特別處理 "Quality=" 之後的數字, 可能小弟所舉的範例並不恰當, 應該把aaa 的Quality 由2/70 改為5/70: 語法: ESSID:"aaa" Quality=5/70 Signal level=-93 dBm Noise level=-95 dBm ESSID:"FON_AP" Quality=34/70 Signal level=-62 dBm Noise level=-95 dBm ESSID:"bbb" Quality=12/70 Signal level=-83 dBm Noise level=-95 dBm 那就可以發現一位數和兩位數的排序問題, 不過沒關係, 反正問題已經解決, 再一次感謝bx2aa 兄, 反倒是完全不見tvirus 兄的蹤影, 人情冷暖由此可見... 補充: 歹謝歹謝! 小弟駑鈍, 原來只要用 "sort -n" 就可以解決數字排序問題, 慚愧慚愧! 此篇文章於 2011-02-01 06:13 AM 被 FYI 編輯。. 原因: sort -n |
回覆 |
會員 ![]() | 回覆: Shell Script 求教 |
回覆 |
會員 ![]() | 就是因為上回看到tvirus 兄的Cacti script 運用awk 的語法出神入化, 所以才會對tvirus 兄非常崇拜, 沒想到現在竟然形像破滅, 至於Alan 兄, 別叫小弟換AP 那就感激不盡了 語法: ESSID:"aaa" Quality=5/70 Signal level=-90 dBm Noise level=-95 dBm ESSID:"Hotel California" Quality=34/70 Signal level=-62 dBm Noise level=-95 dBm ESSID:"bbb" Quality=12/70 Signal level=-83 dBm Noise level=-95 dBm 語法: root@OpenWrt:~# iwlist ath0 scan | grep -B 4 'Encryption key:on' | grep -E 'ESSID:|Quality=' | sed -e '$!N;s/\n//' -e 's/^.*\"\(.*\)\".*=\(.*\)\/.*$/\2 \1/' | sort -r -n 34 Hotel California 12 bbb 5 aaa root@OpenWrt:~# iwlist ath0 scan | grep -B 4 'Encryption key:on' | grep -E 'ESSID:|Quality=' | sed -e '$!N;s/\n//' -e 's/^.*\"\(.*\)\".*=\(.*\)\/.*$/\2 \1/' | sort -r -n | head -n 1 | sed 's/^[0-9]* //' Hotel California |
回覆 |
|
![]() | ||||
主題 | 主題作者 | 討論版 | 回覆 | 最後發表 |
ContextConsole Shell Extension (CmdOpen) | 琥珀 | -- 軟 體 分 享 版 | 1 | 2011-12-03 10:55 AM |
【教學】CD Shell | lamina | -- 其 他 軟 體 討 論 版 | 23 | 2007-04-11 03:37 PM |
【軟體】MSN Shell | kanako0605 | -- 網 路 軟 體 討 論 二 版 (網路其他軟體) | 23 | 2004-07-01 02:34 AM |
【教學】Linux Shell 裡一些很少用到卻很有用的指令 | smallway | -- FreeBSD & Linux 討 論 版 | 0 | 2002-11-05 01:40 AM |
哪兒有 Unix shell 程式的教學? | leonchou | -- 其 他 軟 體 討 論 版 | 2 | 2001-09-25 12:35 AM |
XML | RSS 2.0 | RSS |
本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。