2014-05-01 36 views
0

我試過轉換這個函數。試圖將bash腳本轉換爲perl,無效

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 

正如你可以看到它不輸出什麼,我認爲它應該是,任何幫助將是應用程序reciated ..

回答

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?

+0

謝謝你,我固定的代碼完美,用printf,忘了放那裏得到的數據之間的睡眠。 – jogndogn