1.2 What is a shell?
At its base, a shell is simply a macro processor that executes
commands. A Unix shell is both a command interpreter, which
provides the user interface to the rich set of GNU utilities,
and a programming language, allowing these utilities to be
combined. Files containing commands can be created, and become
commands themselves. These new commands have the same status as
system commands in directories such as '/bin', allowing users
or groups to establish custom environments.
A shell allows execution of GNU commands, both synchronously and
The shell waits for synchronous commands to complete before accepting
more input; asynchronous commands continue to execute in parallel
with the shell while it reads and executes additional commands.
The redirection constructs permit
fine-grained control of the input and output of those commands.
Moreover, the shell allows control over the contents of commands'
Shells may be used interactively or non-interactively: they accept
input typed from the keyboard or from a file.
Shells also provide a small set of built-in
commands (builtins) implementing functionality impossible
or inconvenient to obtain via separate utilities.
exec) cannot be implemented outside of the shell because
they directly manipulate the shell itself.
builtins, among others, could be implemented in separate utilities,
but they are more convenient to use as builtin commands.
All of the shell builtins are described in
While executing commands is essential, most of the power (and
complexity) of shells is due to their embedded programming
languages. Like any high-level language, the shell provides
variables, flow control constructs, quoting, and functions.
Shells offer features geared specifically for
interactive use rather than to augment the programming language.
These interactive features include job control, command line
editing, history and aliases. Each of these features is
described in this manual.