1

私のスクリプト:

#!/usr//bin/perl
#
# Script to balance accounts between servers
# By Philip Gabrielsen
#    
use strict;
use warnings;    
START:
print "\nZimbra account moving script\n";
print "First we will collect data from Zimbra, this may take a while.\n\n";

my %accounts;
DATACOLLECT:
print "Collecting Zimbra mailbox server(s)... ";
my $servers = `zmprov gas mailbox`;
print "OK\n";

print "Collecting numbers of accounts per server... ";
foreach my $server (split(/\n/, $servers)) {
  $accounts{$server} = `zmprov -l gaa -s $server|wc -l`;
}
print "OK\n";

foreach my $server (keys %accounts) {
  print "\nServer $server with ". $accounts{$server} ." accounts\n";
}

print "TEST, is total number of accounts good?";
$accounts{'total'} = 0;
foreach my $server1 (keys %accounts) {
  $accounts{'total'} = $accounts{'total'} + $accounts{$server1};
  print "\nAdded $accounts{$server1} and total is now $accounts{'total'}";
}
print "\nTotal number of accounts: $accounts{'total'}\n";

出力: [zimbra@snake tmp]$ perl accounts.pl

Zimbra account moving script
First we will collect data from Zimbra, this may take a while.

Collecting Zimbra mailbox server(s)... OK
Collecting numbers of accounts per server... OK

Server snake with 363
 accounts

Server tiger with 431
 accounts

Server lion with 273
 accounts
TEST, is total number of accounts good?
Added 363
 and total is now 363
Added 431
 and total is now 794
Added [zimbra@tiberius tmp]$ perl accounts.pl

Zimbra account moving script
First we will collect data from Zimbra, this may take a while.

Collecting Zimbra mailbox server(s)... OK
Collecting numbers of accounts per server... OK

Server titus.zimbra.h.bitbit.net with 363
 accounts

Server tiberius.zimbra.h.bitbit.net with 431
 accounts

Server otho.zimbra.h.bitbit.net with 273
 accounts
TEST, is total number of accounts good?
Added 363
 and total is now 363
Added 431
 and total is now 794
Added 1588 and total is now 1588
Added 273
 and total is now 1861
Total number of accounts: 1861 and total is now 1588
Added 273
 and total is now 1861
Total number of accounts: 1861

最初に見たように、各サーバーからアカウントを一覧表示すると正しい数が表示されますが、最後の部分で、すべての $accounts を合計値に追加したい場合、1588 という数字がポップアップします。これは 273 のはずです...

4

2 に答える 2

0

Zimbra コマンドから読み取った後、入力行を chomp() する必要があります。そのため、「...and total is now」の前に改行があります。

于 2014-02-11T13:32:39.130 に答える