我正在bash中開發一個wifi工具腳本。我是一個新手,這讓我很頭疼。我的腳本中有一點需要「剪切」stdout才能獲得正確的值。我已經開發並正在開發......但是,根據Linux發行版的不同,命令的標準輸出行爲也有所不同。爲不同的linux發行版管理bash腳本
例如。我想在監視模式下設置它後,檢查一個接口的新名稱。該命令的標準輸出(airmon-NG開始WLAN3)在卡利linux是這樣的:
PHY Interface Driver Chipset
phy2 wlan3 rt2800usb Ralink Technology, Corp. RT2870/RT3070
(mac80211 monitor mode vif enabled for [phy2]wlan3 on [phy2]wlan3mon)
(mac80211 station mode vif disabled for [phy2]wlan3)
我在我的腳本這個期望的名字「wlan3mon」與此有:
new_interface=$(airmon-ng start $interface | grep monitor | cut -d ']' -f 3)
new_interface=${new_interface:: -1}
輸出在回溯Linux的相同的命令(airmon-NG開始WLAN3)是這樣的:
Interface Chipset Driver
wlan3 Ralink RT2870/3070 rt2800usb - [phy3]
(monitor mode enabled on mon3)
我從這個輸出在我的腳本這樣做所需的名稱「MON3」:
new_interface=$(airmon-ng start $interface|grep monitor|awk '{print $5}')
new_interface=${new_interface:: -1}
正如你所看到的命令的標準輸出是完全不同的。不知道是否有一種「通用」的方式來做到這一點...如果我必須在之前插入一些控制,以便檢測哪個發行版正在運行,或者有更好的方法來檢測這個比管理命令的標準輸出更好。任何建議,我們將受到歡迎。
謝謝大家!乾杯。
是的。我注意到在這兩個發行版中,airmon都在/ usr/sbin中。正如你所說的是一個bash腳本。沒有-v或--version參數,看裏面也有很大的不同。我想我會在腳本的開頭做一些檢查,檢查是否使用uname -a或類似的東西,如果有Kali或Backtrack,也許我會限制它只用於在需要時執行不同的命令。 :/ – OscarAkaElvis
因此聽起來像是使用相同名稱的不同腳本。最終,它可能只是一個包裝,它會調用一些較低級別的網絡命令,所以也許這就是您需要查看的地方。如果這不明顯,編輯您的問題併發布腳本內容(如果它很大,則鏈接到它)。 –