特定のインターフェイスで受信および送信されたデータに関する情報を出力するのに役立つスクリプトを作成しようとしています。始める方法は次のとおりです。
#!/bin/bash
interface=$1
while true; do
ip -s link ls $interface | awk '{ print $1 "\t" $2}'
sleep 10
done
しかし、私はまた、データ変更の違いを取得したいと思います。どのように出力するのか分かりません。つまり、私のスクリプト行から次のようになりますip -s link ls $interface | awk '{ print $1 "\t" $2}'
。
2: enp0s3:
link/ether 08:00:27:ad:a6:53
RX: bytes
38134 399
TX: bytes
34722 247
38134
たとえば、との間の差を取得し、いくつかの34722
ファイル399
にとの間の差を追加したいと思います。247
ベストアンサー1
必要なタスクを実行する醜いスクリプトがあります。アイデアは次のとおりです。
- インターフェース統計をファイルに保存
- ファイルを1行ずつ読み込む
- 行にRX(またはTX)が含まれている場合は、次の行に解析したい情報が含まれていることを意味します。
スクリプト:
#!/bin/bash
ip -s link ls $interface > ip_stats
RX=0
TX=0
# read file
while read LINE
do
# read RX info form line
if [ $RX -eq 1 ]
then
RX_packets=$(echo $LINE | awk '{print $1}')
RX_bytes=$(echo $LINE | awk '{print $2}')
fi
# see if next line will contain RX stats
if echo $LINE | grep RX
then
RX=1
else
RX=0
fi
# read TX info form line
if [ $TX -eq 1 ]
then
TX_packets=$(echo $LINE | awk '{print $1}')
TX_bytes=$(echo $LINE | awk '{print $2}')
fi
# see if next line will contain TX stats
if echo $LINE | grep TX
then
TX=1
else
TX=0
fi
done < ip_stats
echo RX_packets is $RX_packets
echo TX_packets is $TX_packets
echo RX_bytes is $RX_bytes
echo TX_bytes is $TX_bytes
# make diff
echo packets diff: $(expr $RX_packets - $TX_packets )
echo bytes diff: $(expr $RX_bytes - $TX_bytes )