Alissa- I don't know if you know perl at all, however, it makes doing your job a lot easier...and prettier. ::smile:: The attatched script does precisely what you wanted. There's one caveat, though. It doesn't just look for .com .net .edu .au etc...it just shaves off whatever comes after the last . and the end of the string. The code is heavily commented, and I mention the above caveat there. The script, of course, doesn't address file locking and what not. But I don't think that file locking is a concern, as I can't feature this being run by more than one person at once. Cheers! Sam On Thu, 28 Sep 2000, alissa bader wrote: > I would like to thank everyone who helped me with that > DNS script the other day. This is how I wound up > writing it: > > #!/bin/sh > # to fix secondary dns entries > > for DOMAIN in `cat /tmp/ns1stuff` > do > for DIR in `echo $DOMAIN |cut -c1` > do > echo "zone" '"'"$DOMAIN"'"' "{" >> > /etc/named.conf > echo " type slave;" >> > /etc/named.conf > echo ' file "'$DIR'/db.'$DOMAIN'";' > >> /etc/named.conf > echo " masters {" >> /etc/named.conf > echo " 204.177.32.2;" >> > /etc/named.conf > echo " };" >> /etc/named.conf > echo "};" >> /etc/named.conf > echo "" >> /etc/named.conf > done > > (excuse please the ratty formatting here, damned > web-based email crap) > > I opted not to drop the toplevel domain off of every > domain name, as we might run into duplicates here. > > cut, as it turns out, really is my friend. :> > > One thing I have noticed: you have to be really > careful and specific when you define each variable and > for loop. I have written a number of little scripts > that only ask for one variable. And I was agonizing > for hours over how to define a second one. Finally it > hit me to just add a for loop for it. And wouldn't > you know it, it worked! > > sed sounds like it's pretty much worth knowing, > although I didn't have to use it in this script. time > to poke over the man pages! > > again, thank you all so much, never could have gotten > it working without you. :> > > --alissa > > __________________________________________________ > Do You Yahoo!? > Yahoo! Photos - 35mm Quality Prints, Now Get 15 Free! > http://photos.yahoo.com/ > > _______________________________________________ > techtalk mailing list > [EMAIL PROTECTED] > http://www.linux.org.uk/mailman/listinfo/techtalk > -- ------------------------------------------------------------------------------- Sam Lavenz -- KC0BUH [EMAIL PROTECTED] "I recognize no obligations toward men except one: to respect their freedom and to take no part in a slave society" -- Ayn Rand -- _The Fountainhead_ --
#!/usr/bin/perl # This saves us some headaches...if there aren't two arguments, we # print a usage message and exit. unless ( scalar( @ARGV ) == 2 ) { print "Usage: $0 [infile] [outfile]\n"; exit; } # We read from the file in the first argument # We append to the file in the second open INFILE, "<$ARGV[0]" or die "Could not open input file: $!"; open OUTFILE, ">>$ARGV[1]" or die "Could not open output file: $!"; # As long as we're getting input from our INFILE while( <INFILE> ) { next if /^$/; # Go on to the next line if this line is blank chomp; # This is where all the magic is done. # We just run a pattern match on the string we've read in. # The first set of parens captures anything up to the last # period followed by anything, it stores it in $1 # The second (inner) set of parens captures the first character # and stores it in $2. # # This effectively discards *anything* between the last . and the # end of the string. # mydomain.com => mydomain # mydomain.yourdomain => mydomain # so on m/^((\w).*)\..*$/; # $_ here is simply the string. print OUTFILE "zone \"$_\" {\n", "\ttype slave;\n", "\tfile \"$2/db.$1\";\n\n", "\tmasters {\n\t\t204.177.32.2;\n\t};\n", "};\n\n"; } close OUTFILE and close INFILE;