Known as the CommandLine to people nowadays, it is the main program used for interacting with a computer (besides graphical DesktopEnvironments). It also implements a very high level ProgrammingLanguage that is available for both interactive and scripted use.

The original UNIX shell is called the “Bourne shell”, after its designer Steven Bourne. The executable is just called sh(1), and it's still the foundation of all modern Shells on Unixoid OperatingSystems.

The first derivate was Bill Joy's C shell, csh(1), meant to make shell scripting easier for C programmers. It was developed at UCB as the shell of choice for BSD systems. This shell suffered many problems in interactive uses and non, which eventually even prompted a CshProgrammingConsideredHarmful paper. It has not been released under a FreeSoftware license.

At AT&T, David Korn derived the Korn shell, ksh, from the Bourne shell. This shell is completely backwards compatible with its predecessor and much more powerful. It is quite common on commercial Unix flavours such as Solaris.

Since no ksh variant was ever FreeSoftware (although there was eventually a Free clone called pdksh (public domain ksh) started in the mid 1990s), the GNU project wrote their own Bourne compatible shell, and in typical GNUish punstery called it the bash(1), “Bourne again shell”. See BashNotes for hints and examples for using bash(1).

Meanwhile many of the csh(1)'s shortcomings for interactive use were fixed in the tcsh(1). It is the default shell for modern BSD variants.

Other sh-compatible shells include:

  • ash(1), a very minimalistic variant mostly meant for embedded systems and the like were memory is scarce and interactive use is uncommon.
  • sash(1)?, the Stand-Alone shell which is staticly linked for “emergency repair work” when sh(1) won't work.
  • zsh(1), which features wildly expanded (but backwards compatible) syntax and many convenience features for interactive use, such as improved TabCompletion.

Part of CategoryProgrammingLanguages, CategoryVeryHighLevelProgrammingLanguages