Thank you. This has been most helpful. Thanks to all for your most
helpful insight.

- Bill

On Mon, 10 Jun 2002, Bob Showalter wrote:

> 
> 
> > -----Original Message-----
> > From: William Melanson [mailto:[EMAIL PROTECTED]]
> > Sent: Monday, June 10, 2002 8:21 AM
> > To: [EMAIL PROTECTED]
> > Subject: Is this an eye sore?
> > 
> > 
> > 
> > Might I trouble you kind folks for a bit of feedback? This is
> > my first real script I put together in which it collects all 
> > users from the output of the 'repquota -a' command who have not
> > yet had quotas applied. It does work. I'm just curious if it's
> > an eye sore. Maybe I should just give up attempting this whole
> > programming stuff and stick to wielding my light sabre at those
> > selfless stormtroopers (who come in the hundreds) til the wee
> > hours of the morning?
> > 
> > - Bill
> > 
> > ## start
> > 
> > #!/usr/bin/perl -w
> 
> "use strict" should be used.
> 
> > 
> > system("/usr/bin/clear");
> 
> I would take this out, on the grounds that most programs don't
> do this. But that's up to you.
> 
> > @arg1 = qw(
> >       mail
> >       sysquota
> >       root
> >       nobody
> >       smmsp
> >       daemon
> >       testing
> > );
> 
> I assume this is a list of users to ignore. A hash would make it
> easy to check a user. Also, a more descriptive variable name would
> be better:
> 
>    my %ignore = map { ($_ => 1) } qw(mail sysquota ..and so on..);
> 
> > 
> > unless (open(RQUOTA,"/usr/sbin/repquota -a |"))  {
> >        print("Unable to open repquota file:\n");
> > } else {
> 
> This is typically written as:
> 
>    open(RQUOTA,"/usr/sbin/repquota -a |")
>       or die "Unable to open repquota file: $!\n";
> 
> Then you avoid wrapping the rest of the program in an else block.
> 
> >        if (-e "/tmp/stat.tmp") {
> >           unlink("/tmp/stat.tmp");
> >        }
> 
> I see below you open this file for append mode inside the loop.
> I would suggest just opening the file for output mode here before
> the loop starts. Then you can dispense with the unlink and the
> repeated opening of the file.
> 
>    open(NQUOTA,">/tmp/stat.tmp")
>       or die "Unable to open /tmp/stat.tmp: $!\n";
> 
> >        print("Users Without Quotas * * * *\n\n");
> 
> You want to skip the heading lines of the output (2 lines?), so
> you could add something like:
> 
>    <RQUOTA> for 1..2; # skip first two lines of output
> 
> >        while (<RQUOTA>)  {
> >              if (/\s0\s{7}0\s{1,}/) {
> 
> Here's where some comments in your code would help. This appears
> to be checking for a line representing a user without quotas.
> 
> >                 for ( $i = 0; $i <=6; $i++ )  {
> >                       s/\b$arg1[$i]\b\s{0,}\-\-\s{0,}[0-9]{1,}.*$//g;
> >                 }
> 
> Here it looks like you are "blanking out" the line if it's a
> user you want to ignore. Better IMO to just skip to the next
> line and bypass the code below. Extract the user and check it
> %ignore hash.
> 
> Also, since the data appears to be in a fixed format, you could
> use unpack to grab the portions you want:
> 
>    my ($user, undef, $quota) = unpack('A8 A12 A8', $_);
>    next if $quota;                    # skip if user has a quota
>    next if exists $ignore{$user};     # skip if user is to be ignored
> 
> (Note, you may have to adjust the unpack template; I'm guessing at
> which field(s) you want to look at).
> 
> >                 if (/^[a-zA-Z0-9]/)  {
> >                    print("$_");
> >                 }
> >                 if (/(\w+)/)  {
> >                    unless (open(NQUOTA,">>/tmp/stat.tmp"))  {
> >                           print("Unable to open /tmp/stat.tmp 
> file:\n");
>                    } else {
>                           print(NQUOTA "$1\n");
>                    }
>                 }
>              }
> 
> Now we have a user without a quota, so:
> 
>    print $_;
>    print NQUOTA "$user\n";
> 
>        }
> 
>        print("\n");
>        close(NQUOTA);
>        close(RQUOTA);
> }
> 
> Let's put it all together:
> 
>   #/usr/bin/perl -w
> 
>   use strict;
> 
>   # users to ignore
>   my %ignore = map { ($_ => 1) } qw(mail sysquota
>       root nobody smmsp daemon testing);
> 
>   open(RQUOTA,"/usr/sbin/repquota -a |")
>      or die "Unable to open repquota file: $!\n";
>   open(NQUOTA,">/tmp/stat.tmp")
>       or die "Unable to open /tmp/stat.tmp: $!\n";
> 
>   <RQUOTA> for 1..2;    # skip first two lines of output
>   while (<RQUOTA>) {
>       my ($user, undef, $quota) = unpack('A8 A12 A8', $_);
>       next if $quota > 0;             # skip if user has a quota
>       next if exists $ignore{$user};  # skip if user is to be ignored
>       print $_;
>       print NQUOTA "$user\n";
>   }
> 


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to