0

我制作了一个 bash 脚本,使用 ifconfig 每 10 秒监控一次网络流量。它必须是 ifconfig 否则我会使用不同的工具。

我的问题是因为我的计数器太高了,我必须用它expr来进行计算,但这expr给我带来了一些问题。

#!/bin/bash
#run for how many seconds

savefile=/root/eth0.csv
timer=10

echo "EPOCH,Interface,TX,RX,ChangeTx,ChangeRX" >> $savefile

END=8640
x=$END
while [ $x -gt 0 ]; do

ETH0RX=`ifconfig | grep eth0 -A8 | grep "RX bytes" | tr -s ' ' | cut -d':' -f2 | cut -d ' ' -f1`
ETH0TX=`ifconfig | grep eth0 -A8 | grep "RX bytes" | tr -s ' ' | cut -d':' -f3 | cut -d ' ' -f1`

#ETH0 RX
ETH0RXcurrentvalue=$ETH0RX
ETH0RXchange=$(expr $ETH0RXcurrentvalue - $ETH0RXpreviousvalue)
ETH0RXpreviousvalue=$ETH0RXcurrentvalue

#ETH0 TX
ETH0TXcurrentvalue=$ETH0TX
ETH0TXchange=$(expr $ETH0TXcurrentvalue - $ETH0TXpreviousvalue)
ETH0TXpreviousvalue=$ETH0TXcurrentvalue

epoch=`date +%s`

echo $epoch,ETH0,$ETH0TX,$ETH0RX,$(($ETH0RXchange*8)),$(($ETH0TXchange*8)) >> $savefile

sleep $timer

x=$(($x-1))
done;

我的错误是line 33: arithmetic syntax error(即done;)。如果没有expr,脚本可以正常工作,但是由于我需要使用大量数字expr(我不能使用bc)。

4

1 回答 1

0

我已经解决了这个问题,

当我试图做一个

表达式

然后在脚本上我做了另一个计算

表达式

由于计算是通过回声的另一条线,不断给出错误。

所以我使用下面的代码进行了修复。

ETH0RXcurrentvalue=$ETH0RX
ETH0RXchange=$(expr "$ETH0RXcurrentvalue" - "$ETH0RXpreviousvalue")
ETH0RXpreviousvalue=$ETH0RXcurrentvalue
ETH0RXchange1=$(expr "$ETH0RXchange" \* "8")
echo $ETH0RXchange1
echo $ETH0TXchange1


echo $epoch,ETH0,$ETH0TX,$ETH0RX,$ETH0RXchange1,$ETH0TXchange1 >> $savefile
于 2019-11-21T11:16:12.590 回答