All Unix shells provide filename wildcarding, piping, here documents, command substitution, variables and control structures for condition-testing and iteration.
A sophisticated shell can also change the environment in which other programs execute by passing named variables, a parameter list, or an input source.
In Unix-like operating systems, users typically have many choices of command-line interpreters for interactive sessions.
[3] Though rudimentary by modern standards, it introduced many of the basic features common to all later Unix shells, including piping, simple control structures using if and goto, and filename wildcarding.
[7] Traditionally, the Bourne shell program name is sh and its path in the Unix file system hierarchy is /bin/sh.
From a user's perspective the Bourne shell was immediately recognized when active by its characteristic default command line prompt character, the dollar sign ($).
It was written by Bill Joy as a graduate student at University of California, Berkeley, and was widely distributed with BSD Unix.
[9][better source needed] The C shell also introduced many features for interactive work, including the history and editing mechanisms, aliases, directory stacks, tilde notation, cdpath, job control and path hashing.