bash script expr - 算术语法错误

bash script expr - arithmetic syntax error

我制作了一个 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)。

我已经解决了这个问题,

因为我正在尝试

expr

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

expr

由于另一行是通过 echo 计算的,所以不断出错。

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

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


echo $epoch,ETH0,$ETH0TX,$ETH0RX,$ETH0RXchange1,$ETH0TXchange1 >> $savefile