Shell 简介
在学习 Linux Shell 编程之前,我们先来了解 Shell 的基本概念和发展历程。
Shell 的历史
在计算机操作系统发展之初,便带有命令解释器(Command Interpreter),用于接受用户的命令,并解释它们,从而与计算机进行交互。受 CTSS 和 Multics 系统的影响,Dennis Ritchie 和 Ken Thompson 在设计 UNIX 系统的时候,并没有将命令解释器作为操作系统的一 部分或特权任务,而是把它变成一个类似于编译器的应用程序。
因此,UNIX 中的 shell 是一个独立的程序,一个具有很少特殊权限和内核级调用的命令解释器。这个相当新颖的概念被证明是卓有成效的,并导致了一系列越来越好的 shell 被开发出来。例如 Bourne shell(sh
)、C-shell(csh
)、Korn shell(ksh
),以及后来的 tcsh、bash、zsh、dash 和 Microsoft Power Shell 等等。
Bash(全称 Bourne Again Shell)的开发是因为自由软件基金会出于意识形态的原因想寻求一个属于自由软件的 shell,作为 GNU 项目的一部分。Bash 一开始只是一个“复古”的 shell,没有引入任何创新,随着时间的推移,它得到了扩展,吸收了当时其他 shell 中某些很受欢迎的功能。Bash 最初由自由软件基金会的 Brian Fox 编写,得力于开发者们的共同努力,bash 3.2 版成为了它自己的第四代 shell,使所有其他 shell 都黯然失色。如今,bash 依然是众多 Linux 发行版默认支持并使用的 shell。
Shell 的位置
Shell 位于 Linux 内核之上,用于接收用户输入的指令,操作 Linux 系统上的资源。可以理解为,shell 就是用户和操作系统之间的一层接口。各种 shell 程序(如 bash)本身就是一个独立的应用程序,用户可以通过 shell 的内建命令集或系统中的其他命令,由 shell 命令解释器传给 Linux 内核执行,并返回结果。