2014-11-14 79 views
0

我正在使用netstat命令獲取有關網絡的信息。我想在這裏提到協議的條件。如果是TCP,我需要打印不同的列,而不是UDP。if-then-else基於命令輸出

下面是我想要做的,但它不起作用。請建議,並建議如果有什麼我做錯了:

if [$(netstat -anputw | awk '{print $1}')=="tcp"] then 

netstat -anputw | awk '{print $1,",",$4"}' >> $HOME/MyLog/connections_$HOSTNAME.csv 

elif [$(netstat -anputw | awk '{print $1}')=="udp"] then 

netstat -anputw | awk '{print $5,",",$7}' >> $HOME/MyLog/connections_$HOSTNAME.csv 

fi 

回答

0

[後,請務必留出空間和]前if語句,你應該把命令$(netstat -anputw | awk '{print $1}'下雙引號,如果你正在做字符串比較。

下面是最終腳本:

if [ "$(netstat -anputw | awk '{print $1}')" == "tcp" ]; then 

netstat -anputw | awk '{print $1,",",$4"}' >> $HOME/MyLog/connections_$HOSTNAME.csv 

elif [ "$(netstat -anputw | awk '{print $1}') " == "udp" ]; then 

netstat -anputw | awk '{print $5,",",$7}' >> $HOME/MyLog/connections_$HOSTNAME.csv 

fi 
0

我不知道你想達到什麼樣的,但是我覺得netstat的返回一個列表,而不是一個字符串,因此比較輸出對一個字符串無意義。你必須循環它。請嘗試以下方法

#!/bin/bash 

OUTPUT=$(netstat -anputw | awk '{print $1}'); 

for LINE in $OUTPUT 
do 
    if [[ $LINE == "tcp" ]] ; then 
     echo "TCP!" 
    elif [[ $LINE == "udp" ]] ; then 
     echo "UDP!" 
    fi 
done 
0

爲什麼不通過不要求netstat將它們混合起來?

netstat -anptw # Just tcp 
netstat -anpuw # Just udp 

此外,在TCP的情況下,你似乎並不關心-p信息,所以你還不如不提出要求。而在UDP情況下,是在國家列中沒有數據,所以PID /節目名稱實際上是在第6欄

把一起,我得到:

netstat -antw | awk '{print $1","$4}' >> $HOME/MyLog/connections_$HOSTNAME.csv 
netstat -anpuw | awk '{print $5","$6}' >> $HOME/MyLog/connections_$HOSTNAME.csv 

我懷疑ISN儘管如此,你所需要的信息也不多。也許你想區分TCP偵聽和非偵聽連接。