1 简介(Introduction)

1.1 什么是 Bash?(What is Bash?)

Bash 是用于 GNU 操作系统的 Shell,或命令语言解释器。 这个名字是“Bourne-Again SHell”的缩写,也是 Stephen Bourne 的双关语。Stephen Bourne 是当前 Unix shell sh的直接原始作者,其出现在第七版 Unix 的贝尔实验室研究版中。

Bash 与 sh 有很强的兼容性并且吸收了 Korn shell ksh和 C shell csh的许多有用的特性。它意于严格执行 IEEE 的 POSIX Shell 以及 IEEE POSIX 规范(IEEE 1003.1 标准)定义的工具部分。它在交互使用和编程方面比sh有了功能性的增强。

在 GNU 操作系统中如果提供了其它 shell,比如csh的一个版本,Bash 则作为默认 shell。Bash 像其它 GNU 软件一样,具有非常高的可移植性。它现在几乎运行于每一个 Unix 版本中和较少地运行于具有独立支持端口的其它系统上,例如 MS-DOS、OS/2 以及 Windows 平台上。

1.2 什么是 shell?(What is a shell?)

基本上,shell 是一个用于执行命令的简单宏处理器。术语“宏处理器”意思是用于将文本和符号扩展创建为更大的表达式的功能。

Unix shell 即是命令解释器,也是编程语言。作为命令解释器,shell 提供具有丰富 GUN 实用程序集的用户接口。作为编程语言,其可以把这些实用程序进行联合使用。可以创建包含多条命令的文件,使文件作为命令使用。这些新命令与在像目录“/bin”中的系统命令具有相同的状态,允许用户或组建立用于自动化常规任务的自定义环境。

shell 可以用于交互模式或非交互模式。在交互模式中,它接受用户从键盘输入命令。在非交互模式中,shell 读取文件中的命令并执行。

shell 允许执行 GNU 命令,这包括同步和异步命令。shell 会等待同步命令执行完成,之后才会接受后面的输入;异步命令可以在 shell 在读取和执行后继命令时并行执行。重定向结构可以对命令的输入和输出进行精细控制。还有,shell 允许支配命令环境的内容。

shell 提供一个小型内建命令(builtins)集合,用于执行在其它实用程序中不可行或不方便提供的功能。例如,“cd”、“break”、“continue”和“exec”命令就不能在 shell 外执行,因为这些命令是用于直接操控 shell 自身的。“history”、“getopts”、“kill”或“pwd”和其它一些命令就可以在不同的实用程序中执行,但这些命令在作为内建命令使用时更为方便。所有 shell 内建命令都会在后面的章节进行介绍。

当执行命令成为必不可少的功能时,大多数功能强大(和复杂)的 shell 都具有内嵌编程语言。就像高级编程语言一样,shell 也提供变量、过程控制结构、引用及函数功能。

shell 为交互使用提供了更为合适的特性,而不是为了增强编程语言。这些交互特性包括作业控制(job control)、命令行编辑(command line editing)、命令历史(command history)和别名(aliases)。在这个参考手册后面的章节,将逐一进行介绍。