1.2 什么是shell?
在其基础上,shell只是一个执行命令的宏处理器。宏处理器这一术语意味着文本和符号被扩展以创建更大的表达式的功能。
Unix shell既是一个命令解释器,也是一种编程语言。作为一个命令解释器,shell为丰富的GNU工具集提供了用户接口。编程语言的特点允许这些实用工具被组合起来。 可以创建包含命令的文件,并使其本身成为命令。这些新的命令与/bin等目录中的系统命令具有相同的地位,允许用户或组建立自定义环境以自动执行他们的常见任务。
Shell可以交互式或非交互式地使用。在交互式模式下,它们接受从键盘上键入的输入。 当非交互式执行时,shells执行从文件中读取的命令。
shell允许同步和异步地执行GNU命令。 shell在接受更多的输入之前会等待同步命令的完成;异步命令在读取和执行更多的命令时继续与shell并行执行。 重定向结构允许对这些命令的输入和输出进行细粒度控制。 此外,shell允许对命令环境的内容进行控制。
Shell还提供了一小部分内置命令(builtins),实现了不可能或不方便通过单独的工具获得的功能。 例如,cd
、break
、continue
和exec
不能在Shell之外实现,因为它们直接操作Shell本身。 history
、getopts
、kill
或pwd
等内置命令可以在单独的工具中实现,但它们作为内置命令使用更方便。 所有的Shell内置命令将在后续章节进行描述。
虽然执行命令是必不可少的,但shell的大部分功能(和复杂性)是由于其嵌入的编程语言。像任何高级语言一样,shell提供了变量、流程控制结构、引用和函数。
shell提供了专门用于交互式使用的功能,而不是用于增强编程语言。这些互动功能包括作业控制、命令行编辑、命令历史和别名。本手册对这些功能中的每一个都进行了描述。