尝试将bash脚本转换为perl,无济于事

时间:2014-05-01 04:42:43

标签: perl bash

我尝试转换此功能。

R1=`cat /sys/class/net/eth1/statistics/rx_bytes`
T1=`cat /sys/class/net/eth1/statistics/tx_bytes`
sleep $INTERVAL
R2=`cat /sys/class/net/eth1/statistics/rx_bytes`
T2=`cat /sys/class/net/eth1/statistics/tx_bytes`
TBPS=`expr $T2 - $T1`
RBPS=`expr $R2 - $R1`
TKBPS=`expr $TBPS / 1024`
RKBPS=`expr $RBPS / 1024`
echo "TX $1: $TKBPS kb/s RX $1: $RKBPS kb/s"

perl中的这个:

my $rx = `cat /sys/class/net/eth1/statistics/rx_bytes`;
my $tx = `cat /sys/class/net/eth1/statistics/tx_bytes`;

my $rx1 = `cat /sys/class/net/eth1/statistics/rx_bytes`;
my $tx1 = `cat /sys/class/net/eth1/statistics/tx_bytes`;

my $tb = $tx1 - $tx;
my $rb = $rx1 - $rx;

my $kbs = $tb / 1024;
my $rbs = $rb / 1024;
sleep 1;
print "$kbs $rbs\n";

Bash脚本输出:

TX eth1: 10 kB/s RX eth1: 16 kB/s
TX eth1: 10 kB/s RX eth1: 15 kB/s
TX eth1: 10 kB/s RX eth1: 16 kB/s
TX eth1: 9 kB/s RX eth1: 14 kB/s

Perl脚本输出:

0.158203125 0.212890625
0.22265625 0.14453125
0.052734375 0.072265625
0 0.072265625
0 0.140625

正如你可以看到它没有输出我认为它应该是什么,任何帮助将不胜感激..

1 个答案:

答案 0 :(得分:2)

您的bash脚本输出与您提供的bash脚本代码中的echo语句不匹配。位和字节之间存在差异,因此输出中有输入错误,或者您缺少函数中的代码。

在任何情况下,如果你除了两个整数,expr将返回一个整数,而如果你除了两个整数,Perl将返回一个浮点数。

如果您需要Perl脚本的整数结果,请查看使用int关键字显式转换数字参数。有关示例,请参阅:How can I make integer division in Perl OR How can I make my binary search work?