SHELL scripts..... HOW TO START LEARN????

Mark Terribile materribile at
Sun Sep 14 03:28:06 PDT 2003


> Do you happen to know where is some helpful
> information about SHELL
> programming???

Others have posted some fine references; I'd like to
belabor you with a piece of experience:

     There is a difference between writing shell
     scripts and writing shell programs.

 o A script is a series of commands as you might enter
   them at the keyboard.

 o A program is a sequence of commands that are
   composed with the same care that one would (or
   should) employ when programming in other
   languages; care regarding the ability of someone
   else to read and understand the program; care
   regarding one's own ability to read and understand
   it six months, or sixty months, later; care that
   inputs are validated and variables are used
   consistently, etc.

Since shell programs invoke shell commands and
pipelines, and since commands and pipelines of
commands all use different argument syntaxes, it's
very important to make sure that the person trying to
read the overall flow doesn't get lost in the minutia.

This requires that program organization be at least
as good as the organization of a C or C++ program ten
times the size of the shell program.  Keep related
computations together in groups, just as you put
related sentences in order in a paragraph.

It also requires more attention to naming what you
are doing.  If you have a pipeline constructed with
arcane commands to do subtle and magical things, put
it in a shell function and name it clearly.  (If your
shell does not support functions, switch to one that
does.  I like  ksh , but  bash  is good too.)  Use
functions freely and test them independently of each
other.  (It's easier in the shell than in most
programming languages.)

Since most shells do not support structured data,
you cannot use  structs  (or records, or classes)
to describe your data layout.  Comment your data
accurately.  This does not necessarily mean profusely.

When you use a new variable in a function scope, use
whatever the shell gives you to make sure that you
are using a local instance, and not writing over a
variable in an outer (dynamic) scope.

There's lots more, but this will get you started.

                                 Mark Terribile

Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software

More information about the freebsd-questions mailing list