什么是shell?
简单来说,shell是一个执行命令的宏处理(macro processor)器。 术语宏处理器(macro processor)是指将文本和符号扩展到创建更大的表达式的功能。
在linux系统中shell介于Linux内核与终端用户之间,让用户通过可以shell来操作内核。
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
Unix shell可以作为解释器(interpreter)和编程语言使用。
当作为命令解释器使用时。shell为用户接口提供了丰富的GNU命令集,如 cd dir ls find ...等实用的命令。
当作为编程语言时。shell特性允许将多个命令组合在一起,可以创建包含命令的文件,并成为命令本身。 这些新命令在诸如“/bin”的目录中具有与系统命令相同的状态,允许用户或组建立自定义环境来自动化它们的常见任务。
Shell可以在交互式模式或非交互式模式下使用。
- 交互式: 执行命令从键盘键入
- 非交互试:执行从文件读取到命令
shell允许以同步和异步方式执行GNU命令。在接受更多输入之前,shell将等待同步命令完成;异步命令在读取和执行其他命令时,继续与shell并行执行。“重定向”构造允许对这些命令的输入和输出进行细粒度控制。此外,shell允许对命令环境的内容进行控制。 shell还提供了一组内置命令(“builtins”),实现功能不可能或不方便通过单独的实用程序获得。例如,“cd”、“break”、“continue”和“exec”都不能在shell之外实现,因为它们直接操纵shell本身。“history”、“getopts”、“kill”或“pwd”的内置程序可以在不同的实用程序中实现,但它们更便于作为构建命令使用。后面的部分将描述所有的shell构建。
与其他编程语言相同,shell也提供了变量,流程控制,引用,函数。
shell中的常见名词
定义 | 解释 |
---|---|
POSIX | 一个基于Unix的开放系统标准系列。Bash主要关注POSIX 1003.1标准的外壳和实用程序部分。 |
blank | 一个空格或者制表符 |
builtin | 由shell本身在内部实现的命令,而不是文件系统中的某个可执行程序。 |
control operator | 流程控制语句,执行控制功能的“令牌”。 |
exit status | 命令返回给它的调用者的值。该值限制为8位,因此最大值为255。 |
field | 一个文本单元,它是一个shell扩展的结果。扩展后,当执行一个命令时,结果字段被用作命令名和参数。 |
filename | 用于标识文件的字符串 |
job | 由管道组成的一组过程,以及由它派生的任何进程,它们都在同一个进程组中。 |
job control | 用户可以有选择地停止(暂停)并重启(恢复)进程的机制。 |
metacharacter | 当未被引用时,一个字符将单词分开。元字符是一个“空白”或下列字符之一。'', '&', ';','(', ')', '<', or '>'. |
name | 由字母、数字和下划线组成的“单词”,以字母或下划线开头。名称被用作shell变量和函数名。也称为“标识符”。 |
operator | “控制操作符”或“重定向操作符”。对于重定向操作符的列表。运算符包含至少一个未被引用的“元字符”。 |
process group | 每个具有相同进程组ID的相关进程的集合。 |
process group ID | 在其生命周期中表示“进程组”的唯一标识符。 |
reserved word | 一个对shell有特殊意义的词。大多数保留字引入了shell流控制结构,例如“for”和“while”。 |
return status | “退出状态”的同义词。 |
signal | 一种机制,通过该机制可以通过系统中发生的事件的内核来通知进程。 |
special builtin | 一个被POSIX标准分类为特殊的shell内置命令。 |
token | 由shell层考虑单个单元的一系列字符。它要么是一个“单词”,要么是一个“运算符”。 |
word | 由shell作为单元处理的一系列字符。词汇可能不包括未引用的“元字符”。 |