Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 02 Mar 2000 23:51:28 -0800
From:      Doug Barton <Doug@gorean.org>
To:        Joe Park <joepark@uclink4.berkeley.edu>
Cc:        freebsd-questions@FreeBSD.ORG
Subject:   Re: very basic scripting questions
Message-ID:  <38BF6F00.84E6DD15@gorean.org>
References:  <4.2.0.58.20000302214315.00c0e100@uclink4.berkeley.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
Joe Park wrote:
> 
> Hello,
> 
> I'm a newbie and I would like to ask you guys about scripting.  I need to
> write a script that does chmod functions on files/directories listed at
> separate file. (it doesn't have to be a argument.  the script already knows
> the name of the file.)  For example, let say there is a file list_files.txt
> 
> list_files.txt :
> 750  /usr/src/tmp
> 750  /usr/src/lib
> 
> How do I feed each line to chmod?  (maybe with cat?)  How about if I need
> to do some filtering, using regular expression?
> 
> I'm sorry to bother you guys with such a simple question.  Where can I find
> more books about unix scripting?  I just bought "mastering regular
> expression" from O'Reilley.  Is this a right choice?

	There is no such thing as "unix scripting." There are many different
scripting languages that run in a unix environment. In fact, you could
make a semantic argument that "scripting" is the wrong word altogether.
What you're really doing is programming. 

	Ok, now for some really useful information. What you want to learn
depends on what you need to do. If you need to do a lot of routine tasks
like this (especially tasks that involve file processing) you want to
learn perl. "Learning Perl" and after you've mastered that "Programming
Perl" from O'Reilly are your friends. If you will be doing a lot of
general system administration tasks or need to work across a number of
different platforms you should learn Bourne shell. The "Learning Bash"
book from O'Reilly is also really good. 

	Now for your actual problem. This can be done with a simple perl
script. Please refer to the above resources and "man perl" for more
details. I'm sure someone will have comments about my code... 

Good luck,

Doug
-- 
"Welcome to the desert of the real." 

    - Laurence Fishburne as Morpheus, "The Matrix"

#!/usr/bin/perl -w

# Open the file to read the info
# Print an informative error message if this doesn't work
open(LIST, "list_files.txt") or die "Can't open list_files.txt for read:
$!";

# Loop through each line of the file
while (<LIST>)
{
        # gnaw off the newline at the end of the line
        chomp;

        # Set the variables
        my($mode, $filename) = (/(\S+)\s+(\S+)/);

        # Set the modes. Perl chmod() is a builtin which calls the 
        # Unix internal. 

        # But the chmod commands needs a 0 prepended
        # And its mode in octal format
        $mode = "0$mode" if (length($mode) == 3);

        # Always check your return codes
        if ((chmod oct($mode), $filename) == 1)
        {
                print "Okey dokey, set $mode on $filename\n";
        } else {
                print "Whoah! Couldn't set the mode on $filename\n";
        }
}

# We don't really need this since we're just going to exit next
# but might as well learn good habits...
close LIST;

exit 0;


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?38BF6F00.84E6DD15>