我尝试制作脚本来帮助我输出有关特定接口上接收和传输数据的信息。这是它的开始内容:
#!/bin/bash
interface=$1
while true; do
ip -s link ls $interface | awk '{ print $1 "\t" $2}'
sleep 10
done
但我也想得到数据变化的差异。我完全不知道如何输出它。所以对于 ie 我从我的脚本行得到这个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
我有一个丑陋的脚本可以满足您的需求。这个想法是:
- 将接口统计信息存储在文件中
- 逐行读取文件
- 如果该行包含 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 )