Korn Shell (ksh) Programming
This is the top level of my "Intro to Korn shell programming" tree.
Korn shell is a 'shell-scripting' language, as well as a user-level login
shell. It is also a superset of a POSIX.1 compliant shell, which is great
for ensuring portability.
Scripting, when done right, is a fast, easy way to "get the job done",
without the usual "code,compile,test,debug" overhead of writing in C or
some other compiled language. It is easier than C for multiple reasons:
UNIX tends to take #2 to extremes, since it comes standard with "powerful
tools" that can be strung together with pipes or other mechanisms, to get
the result you want, with a short development time. It may not be as
efficient as a fully compiled solution, but quite often it can "get the job
done" in a few seconds of run time, compared to 1 second or less for a
- Scripting commands tend to be more readable than low-level code.
(with the exception of perl)
- Scriping languages tend to come with powerful tools attached
- There is no "compile" phase, so "tweaking" can be done rapidly.
A quick scripting solution can be used as a prototype. Then, when
you have been using the prototype happily for a while, and you have
evolved the behaviour your end users are happiest with, you can go back and
code a faster, more robust solution in a lower-level language.
That is not to say that scripts cannot be robust! It is possible to do a
great deal of error checking in scripts. Unfortunately, it is not common
practice to do so.
What can you do with ksh?
A heck of a lot!
You have access to the full range of UNIX utilities, plus some nifty
Generally speaking, UNIX scripting is a matter of using the various command
line utilities as appropriate, with the shell as a means of facilitating
communication between each step.
Unfortunately, running all these separate 'external' programs can sometimes
result in things working rather slowly. Which is why ksh has a few more
things "built in" to it than the older 'sh'.
Why ksh, not XYZsh for programming?
Bourne shell has been THE "standard" UNIX shellscript language for many
years. However, it does lack some things that would be very useful, at a
basic level. Some of those things were added to C-shell (csh) later on.
However, csh is undesirable to use in programming,
for various reasons.
Happily, ksh adds most of the things that people say csh has, but sh does
not. So much so, that ksh became the basis for the "POSIX shell". Which
means that all properly POSIX-compliant systems MUST HAVE something
compatible, even though it is now named "sh" like the old Bourne shell.
(For example, /usr/xpg4/bin/sh, is a LINK to /bin/ksh, on solaris!)
More precisely, the behaviour of a POSIX-compliant shell is specified in
"IEEE POSIX 1003.2"
BTW: "Korn shell" was written by
"David Korn", around 1982 at AT&T labs. You can now freely download
the full source from
AT&T if you're not lucky enough to use an OS that comes with ksh
already. It's "open source", even!
Now we get to the good stuff. Please note: you should read these in order.
If you do not understand all the stuff from the previous chapters, you
may get very confused.
I am happy to note that my KSH tutorial has been translated into
Please let me know of any other translations.
This material Copyright 2000-2011 Philip Brown
Part of bolthole.com...
Solaris tips ...
AWK tutorial ...
OO Programming tutorial