Can you just tell me how to add a value to the PATH without covering the 
fuckin' history of Unix?

In bash/sh/ksh:
	$ export PATH=$PATH:/new/directory/

In tcsh:
	$ setenv PATH "$PATH:/new/directory/"

I honestly haven't used csh in so long that I've forgotten how to do it 
in that shell.  But I'll remember to install csh and try it.

Ok, how the hell does all that work?
What is a path?

A unix directory is a tree: it has a root directory (or folder for your windows 
people) which contains files or subdirectories (subfolders).  A specific file 
can be uniquely located with the filename and the directory in which it resides, 
that directory can in turn be uniquely located with the name and the directory 
in which it resides, and so on.  The full chain of directories in which a 
file/folder resides is termed the (full) path to the file, or the path for 
short.  On unix, the "/" character separates each directory.  For example, a 
file "testfoo.txt" located in the directory "sbin", which in turn is located 
in the directory "usr", which in turn is located in the root directory, can be 
accessed as "/usr/sbin/testfoo.txt".  Naturally, there are also relative paths
since the path to a particular file can be relative to where exactly in the 
directory tree you are presently located in.  I am assuming here that you have 
used "cd" and "ls" and other filesystem utilities so you know conceptually 
what I'm describing as a tree and a location.

What is $PATH?

In order for the command line to know exactly where a file is, it needs to know 
the full path to that file (e.g. "/usr/sbin/testfoo.txt").  The command-line 
interpreter knows where a file is because: (1) You tell it exactly where it is 
by specifying the full path; or (2) The directory in which the file resides is 
"in the PATH".  In this case, the path refers to an environment variable 
(we'll call it $PATH) which holds a set of directory paths.  Each of these 
entries (separated by a ':') represent directories in which the command-line 
interpreter will search for files that aren't located via the full path or 
relative path specified by the user.  So when you type "useradd" at the 
command-prompt, it searches inside every path in your $PATH.  Note that if the 
current directory (specified by a '.') is not in your path, it will not assume 
that it should look in the current directory -- a lot of DOS folk have trouble 
with this concept.  If the file is not found in any of the directories specified, 
then the command-line interpreter issues a "Command not found" error.  And, if 
you go on IRC, and hear something like "adduser is in /usr/sbin/ which is probably 
not in your PATH" you now understand what I mean.

How do I add stuff to my PATH? 

Well, the PATH is an environment variable.  It contains a list of directory paths 
each separated by the ':' character.  So to add "/usr/sbin" to your path you 
simply need to concatenate ":/usr/sbin" to the string currently held in environment 
variable PATH.  Now how you actually change environment variables depends on the 
command-line interpreter you are using (we call the command-line interpreters 
"shells" for short and some of the popular ones include bash,tcsh,ksh,csh,sh). 
Shells belong to one of two families: (1) C Shells; and (2) Bourne Shells.  
Shells like sh,ksh,bash are Bourne Shells and all have similar syntaxes; 
Shells like csh, tcsh are C Shells and have their own syntax.  So assigning values 
to variables has a lot to do with which of the two types of shells you are 
running on the system at the time.  (This is not a trivial point since on some 
systems, the startup scripts are written in sh which is a Bourne Shell so if 
you personally run a C shell it's important to know how to set variables in both, 
or atleast port stuff from one to the other as I do sometimes).

How do I change the value of environment variables in Bourne Shells?

Just like in programming class, you assign new values with the '=' operator. 
So for example, you can type 'VARNAME = foo' to assign the string "foo" 
to the variable name VARNAME.  So if you want to assign '/usr/sbin' to your 
path you simply:
	
	$ PATH=/usr/sbin
	
But how do I add to the value of PATH without obliterating everything in it?

Firstly, if you obliterated your PATH you should excute another shell 
(i.e. open another terminal) so that you start with a fresh copy of the 
environment (which has PATH defined in it).

Well, to access values inside variables in Bash you simply put the '$' character 
(I call it the subsitution operator but I'm sure it has a real name read your shell's 
manpage for details).  So $PATH refers to the values inside the PATH environment 
variable.  To keep that value in the new assignment, you simply reassign it to 
itself:

	$ PATH=$PATH:/usr/sbin
	
This means that PATH will become a variable with the old value for $PATH 
followed by the special path delimeter character ':' and the path you wish 
to add (in this case /usr/sbin).  This means that the next time that you type 
a command, the PATH will have grown to include the directory which contains the 
command (which is just an executable on the filesystem).

Alternatively, you can place { } around the variable name you are trying to 
access to delimit it from the rest of the characters.  Therefore, this also works:

	$ PATH=${PATH}:/usr/sbin

Lastly, there is the command EXPORT.  This is a built-in shell command which 
adds variables to the global environment.  Therefore, to set the variable PATH 
the global environment, you

	$ export PATH
	
And since you can do this in one statement, 

	$ export PATH=$PATH:/usr/sbin

NOTE: Dealing with variables in shells is a fun topic in and of itself, and one that 
I'd urge people to explore.  They all demonstrate different ways of approaching 
some basic architectural choices made when implementing a language, since these 
shells are also full-fledged (as in Turing complete) programming languages. 
Just read the man page for your specific shell to get into the details.

So what if I don't use a Bourne Shell?  How do I change the path in a 
C shell?

The same discussion from the Bourne Shell example applies to C shells.  
The only issue is that the syntax for assigning and accessing variables 
changes.  To set an environment variable in C shells, you use the command 
setenv instead of export. And, in C shells, the assignment is implied 
so you don't need the '=' operator (the second thing in the command is 
always the name of the variable being assigned to).  Moreover, in certain 
C shells the { } as delimeters for the variable name is mandatory.  Hence:

	$ setenv PATH ${PATH}:/new/directory/

How do I do it in whatever $SHELL I have?

I only really use Bash, and I have been favoring Kourne Shells for a while now, 
so I can't really be of much help to people using all of the 10+ shells in 
existence.  But I'd be curious to see how different the process is, so you can 
send me an email with the name of your shell and I can try and play around with 
it and perhaps add it to this document.