2015-10-27 59 views
-3

由於某種原因,grep命令沒有執行if語句。我該如何解決這個grep命令?

#!/bin/bash 

ifconfig wlan0 down 
iwconfig wlan0 mode monitor 
ifconfig wlan0 up 
if airbase-ng -c 6 -e "Steve's HotSpot" wlan0 | grep -q " Client" 
then 
clear 
echo "SomeOne connected to your Hotspot" 
fi 
+2

「airbase-ng -c 6 -e」Steve's HotSpot「wlan0」的輸出是什麼樣的? –

+0

03:14:42創建的分接口at0 03:14:42嘗試將MTU設置爲at0到1500 03:14:42啓動了BSSID爲1E:AB:15:29:8F:14的接入點。 – Mohamed

+0

@Mohamed:如果這是輸出,那麼爲什麼你希望'grep -q「Client」'指示成功(並因此輸入'if'子句),假設輸出不包含''Client' ?一般來說,請將樣本/預期的輸入/輸出添加到_question_ - 而不是評論 - 最好_to開頭with_。 – mklement0

回答

0

未經測試的代碼

if [[ -n $(airbase-ng -c 6 -e "Steve's HotSpot" wlan0 | grep -q " Client") ]] 

-n說,如果條件是非零而$()在自己的殼執行該命令推輸出回到腳本。

Bash Programming Help

+0

這個命令可以運行大約幾十秒,然後停止 – Mohamed

0

你不(固定的grep)。

請注意,您的代碼正在測試grep的退出值,而不是生成的文本字符串。

您可以做的是將您使用的命令的結果分配給一個或兩個變量,然後測試正確的變量。這也可以讓你以呼應變量,看是怎麼回事:

#!/bin/bash 

ifconfig wlan0 down 
iwconfig wlan0 mode monitor 
ifconfig wlan0 up 
result="$(airbase-ng -c 6 -e "Steve's HotSpot" wlan0 | grep "Client")" 
exitval="$?" 
echo "the var is $result" 
if [[ $exitval == 0 ]] 
then 
    clear 
    echo "SomeOne connected to your Hotspot" 
fi 

如果你真的需要測試從grep的輸出字符串,然後改變:

if [[ $exitval == 0 ]] 

if [[ -n $result ]] 
+0

考慮到grep的輸出受到'-q'的抑制,我真的不知道你的或者離線的「解決方案」增益 –

+0

第16行和第18行的語法錯誤 – Mohamed

+0

@Mohamed考慮到只有灰色區域內的代碼中有13行。我假定你複製了一些不應該用在腳本中的東西。 – 2015-10-27 03:32:31