|
|||||||
| Forums | Search Forums | Register | Forum Rules | Man Pages | Albums | FAQ | Members | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
|
|
|
Thread Tools | Search this Thread | Display Modes |
|
#8
|
|||
|
|||
|
Hi , This is what the end result to your code: Unless I pasted it wrong. I still get that dang error ( but looks a little different) Checking 10.0.0.0/8 Checking 146.149.0.0/16 Error 48: This subnet does not exist. 146.149.0.0/16 getobjectlst.exe :146.149.0.0/16: Error code = 48 dnsoptions is null or undefined, going on to the next subnet Checking 161.16.0.0/16 Error 48: This subnet does not exist. 161.16.0.0/16 getobjectlst.exe :161.16.0.0/16: Error code = 48 dnsoptions is null or undefined, going on to the next subnet Checking 161.56.0.0/16 Code:
#!perl -w
my %counts;
my @subnettype;
my @dnsoptions;
my @dnsoptions2;
my @subnetpart2;
my $snetpart2;
my $subnet;
open(my $log, ">log-external-.txt") or die "Could not open log: $!\n";
printf $log "Subnet,Static,DHCP,Unused\n";
##### Step 1, read subnets
open(my $in, "<m-names.txt") or die "Could not open m-names2.txt: $!\n";
while(<$in>) {
#next unless /(.*?)\/(.*)$/;
#next unless /(.*?)$/;
chomp;
$subnet = $_;
print "Checking $subnet\n";
@dnsoptions = `./getobjectlst.exe -u xx -p xx -a $subnet -o Rich`;
# Now, at this point, we may have "Error 48" in @dnsoptions, or we may have
# the nicely formatted output. We'll have to check for both cases here.
# Let's check the unsuccessful case first. The condition below checks if
# the first element of @dnsoptions array has the following text in it -
# "Error 48: This subnet does not exist." in it.
if (not defined($dnsoptions[0])) {
print "dnsoptions is null or undefined, going on to the next subnet\n";
next;
if (join(" ",@dnsoptions) =~ /Error 48: This subnet does not exist./) {
# call "getsubnetlst.exe", passing $subnet as one of the parameters
@subnetpart2 = `./getsubnetlst.exe -u xx-p xx -a $subnet -t network -o Rich`;
# now loop through each element of the array @subnetpart2, which looks like this -
# ##########################################################################
# "East" "146.149.1.0" "N" "" "146.149.0.0" " " " " "255.255.255.128"
# ##########################################################################
# pick up the 2nd field from the left (e.g. 146.149.1.0 above), and pass it as
# a parameter to the cli "getobjectlst.exe".
foreach my $line (@subnetpart2) {
# get the 2nd field from the left
$snetpart2 = (split/"\s+"/, $line)[1];
# and now pass it to "getobjectlst.exe"; assign the output to
# the array @dnsoptions2
@dnsoptions2 = `./getobjectlst.exe -u xx -p xx -a $snetpart2 -o Rich`;
# find out counts of each subnettype (4th field from left)
foreach my $line (@dnsoptions2) {
@subnettype = split/"\s+"/, $line;
$counts{$subnettype[3]}++;
}
}
} else # successful output from getobjectlst.exe
{
# find out counts of each subnettype (4th field from left)
foreach my $line (@dnsoptions) {
@subnettype = split/"\s+"/, $line;
$counts{$subnettype[3]}++;
}
}
printf $log "%s,%d,%d,%d\n", $subnet, ($counts{Static} or 0), ($counts{DHCP} or 0), ($counts{Unused} or 0);
%counts = ();
}
}
close($in);
close($log); |
| Sponsored Links | ||
|
|
#9
|
||||
|
||||
|
What's the output of the following program ? Code:
#!perl -w
my @dnsoptions;
my $subnet;
open(my $in, "<m-names2.txt") or die "Could not open m-names2.txt: $!\n";
while(<$in>) {
next unless /(.*?)\/(.*)$/;
$subnet = $1;
print "Checking $subnet\n";
@dnsoptions = `./getobjectlst.exe -u Xxx-p Xxx -a $subnet -o rich`;
if (@dnsoptions) { # @dnsoptions is not empty
if (join(" ",@dnsoptions) =~ /Error 48: This subnet does not exist./) {
print "dnsoptions contains the Error 48.\n";
} else {
print "dnsoptions was created successfully, it's size = $#dnsoptions\n";
}
} else {
print "dnsoptions is null or undefined, going on to the next subnet\n";
}
}
close($in);tyler_durden |
| Sponsored Links | ||
|
|
#10
|
|||
|
|||
|
HI, here ya go
$ perl tyler.pl Checking 10.0.0.0 dnsoptions was created successfully, it's size = 253 Checking 146.149.0.0 Error 48: This subnet does not exist. 146.149.0.0 getobjectlst.exe :146.149.0.0: Error code = 48 dnsoptions is null or undefined, going on to the next subnet Checking 161.16.0.0 Error 48: This subnet does not exist. 161.16.0.0 getobjectlst.exe :161.16.0.0: Error code = 48 dnsoptions is null or undefined, going on to the next subnet Checking 161.56.0.0 Error 48: This subnet does not exist. 161.56.0.0 getobjectlst.exe :161.56.0.0: Error code = 48 dnsoptions is null or undefined, going on to the next subnet Checking 162.2.0.0 dnsoptions is null or undefined, going on to the next subnet Checking 162.5.0.0 |
|
#11
|
|||
|
|||
|
HI,
This maybe a clue.. we need to retain the mask bit "/16" or what ever is set on the m-names.txt file when it calls getsubnetlst.exe This is the code ran manually ./getsubnetlst.exe -u xx -p xx -a 146.149.0.0/16 -t network -o Rich "East" "146.149.89.0" "Y" "" "146.149.0.0" " " " " "255.255.255.224" "West" "146.149.89.64" "Y" "" "146.149.0.0" " " " " "255.255.255.224" "" "146.149.90.0" "Y" "" "146.149.0.0" " " " " "255.255.255.0" "" "146.149.91.0" "N" "" "146.149.0.0" " " " " "255.255.255.0" |
| Sponsored Links | |
|
|
#12
|
||||
|
||||
|
The following code uses the entire line from "m-names2.txt" i.e. "167.0.0.0/8" instead of just "167.0.0.0". Code:
#!perl -w
my @dnsoptions;
my $subnet;
open(my $in, "<m-names2.txt") or die "Could not open m-names2.txt: $!\n";
while(<$in>) {
$subnet = $_;
print "Checking $subnet\n";
@dnsoptions = `./getobjectlst.exe -u Xxx-p Xxx -a $subnet -o rich`;
if (@dnsoptions) { # @dnsoptions is not empty
if (join(" ",@dnsoptions) =~ /Error 48: This subnet does not exist./) {
print "dnsoptions contains the Error 48.\n";
} else {
print "dnsoptions was created successfully, it's size = $#dnsoptions\n";
}
} else {
print "dnsoptions is null or undefined, going on to the next subnet\n";
}
print "====================================\n";
}
close($in);But I think the problem lies in this line: "@dnsoptions = `./getobjectlst.exe -u Xxx-p Xxx -a $subnet -o rich`;". It does not capture stderr of getobjectlst.exe, which is thrown out to the terminal (the text in bold red below). Code:
Checking 146.149.0.0 Error 48: This subnet does not exist. 146.149.0.0 getobjectlst.exe :146.149.0.0: Error code = 48 dnsoptions is null or undefined, going on to the next subnet If "getobjectlst.exe" fails, then the text in bold red does not get assigned to @dnsoptions. But if "getobjectlst.exe" is successful, then the output does get assigned to @dnsoptions. tyler_durden |
| Sponsored Links | |
|
|
#13
|
|||
|
|||
|
OK, I follow you, so what do you recommend?
|
| Sponsored Links | |
|
|
#14
|
|||
|
|||
|
I ran your latest test code, this is what I got:
$ perl tyler1.pl Checking 10.0.0.0/8 dnsoptions was created successfully, it's size = 253 ==================================== Checking 146.149.0.0/16 Error 48: This subnet does not exist. 146.149.0.0/16 getobjectlst.exe :146.149.0.0/16: Error code = 48 dnsoptions is null or undefined, going on to the next subnet ==================================== Checking 161.16.0.0/16 Error 48: This subnet does not exist. 161.16.0.0/16 getobjectlst.exe :161.16.0.0/16: Error code = 48 dnsoptions is null or undefined, going on to the next subnet ==================================== Checking 161.56.0.0/16 Error 48: This subnet does not exist. 161.56.0.0/16 getobjectlst.exe :161.56.0.0/16: Error code = 48 dnsoptions is null or undefined, going on to the next subnet ==================================== Checking 162.2.0.0/16 Error 48: This subnet does not exist. 162.2.0.0/16 getobjectlst.exe :162.2.0.0/16: Error code = 48 dnsoptions is null or undefined, going on to the next subnet ==================================== Checking 162.5.0.0/16 dnsoptions was created successfully, it's size = 1021 ==================================== Checking 162.15.0.0/16 Error 48: This subnet does not exist. 162.15.0.0/16 getobjectlst.exe :162.15.0.0/16: Error code = 48 dnsoptions is null or undefined, going on to the next subnet ==================================== Checking 162.30.0.0/16 |
| Sponsored Links | ||
|
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| wrapper script in perl | richsark | Shell Programming and Scripting | 5 | 03-23-2009 04:41 PM |
| Help with a wrapper script not working | richsark | Shell Programming and Scripting | 0 | 03-09-2009 01:49 PM |
| Korn Shell Wrapper script | pareshan | Shell Programming and Scripting | 6 | 12-23-2008 12:56 PM |
| What is a wrapper script | thana | UNIX for Dummies Questions & Answers | 1 | 01-28-2008 07:11 AM |
| What is wrapper script and how to write | chiru | UNIX for Dummies Questions & Answers | 1 | 06-12-2006 05:23 AM |
|
|