On Sat, Feb 07, 2004 at 12:57:45PM -0600, Kenton Brede wrote: > I've written the following subroutine to snag the next available UID in > the 700 range from /etc/passwd. I then use the return value with > "useradd" to add a new user. > > The subroutine works fine. If no UID 700 is found it returns 700. > It then returns the next available UID or adds 1 to the last UID in the 700 > block. > > Even though it is functional it seems a little clunky to me. If anyone > has the time and inclination to point me to changes I could make I > would appreciate it. > Thanks, > Kent > > #!/usr/bin/perl > use warnings; > use strict; > > print get_uid() . "\n"; > > # Get next available UID in the 700 range > sub get_uid { > # Create array populated by UIDs > my $new_uid ||= '700'; # default to 700 if it doesn't exist.
my $new_uid = 700; > my @list; > while(<DATA>) { > my @uids = split(/:/); > if ($uids[2] =~ /^7\d\d$/) { > push @list, $uids[2]; > } > } > > @list = sort(@list); > > # iterate though list snagging the next available UID > my $num = '700'; > foreach my $i (@list) { > if ($i > $num) { > $new_uid = $num; > last; > } > elsif ($i == $num) { > $new_uid = $num + 1; > } > $num++; > } > return $new_uid; > } > > __DATA__ > user1:x:700:101:user1:/dev/null:/bin/false > user2:x:706:101:user2:/dev/null:/bin/false > user3:x:707:101:user3:/dev/null:/bin/false > user4:x:708:101:user4:/dev/null:/bin/false I'd probably code something like: perl -le '$u = 700; $u++ while getpwuid $u; print $u' perldoc -f getpwuid -- Paul Johnson - [EMAIL PROTECTED] http://www.pjcj.net -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>