什么是shell
shell是一个读取并解释命令的程序,因为它的重要性,它作为Unix/Linux系统的一部分集成在系统中而不需要你另外安装。
查看系统中安装了哪些shell:cat /etc/shells
查看当前使用的shell名称:echo $SHELL
shell允许用户输入命令以及间接地访问内核的服务,shell还支持编写shell脚本,这些脚本包含常规的Unix/Linux命令以及特殊的shell编程命令。
Bourne Shell家族:sh、ksh、bash
- 第一个shell由Unix的创建者
Ken Thompson开发,于1971-1975年使用,随第1版Unix至第6版Unix一起发行,名称为sh,也称Thompson shell。 - 1975年Bell实验室的一群程序员(由
John Mashey领头)编写了一个新的shell用来替代Thompson shell,也命名为sh。 - 1976年Bell实验室的程序员
Steve Bourne着手开发一种全新的shell用来替代Thompson shell,也命名为sh。
不管是Mashey的shell还是Bourne的shell相比Thompson shell都提供了许多重要的改进,短时间内这两个shell在Bell实验室都获得了支持者。尽管它们都向后兼容Thompson shell,但是它们彼此之间不兼容。这样就导致了一个内部争论,即哪个shell应该成为标准的Unix shell。为了永久地解决这个问题,专门成立了一个委员会来研究这一问题,最终胜出的是Bourne的shell。
因此在Unix发行第7版的时,Bourne shell成为所有Unix用户的默认shell。Bourne shell非常稳定,设计特别优秀,多年以来一直是Unix的标准shell。Bourne shell的获得了广泛使用,所有与之兼容的shell,都被认为是Bourne shell家族的成员。
- 1982年Bell实验室的科学家
David Korn创建了一种Bourne shell的替代品,称为Korn Shell或者ksh。新shell基于Korn和其他研究人员在最近几年创建的工具。这样相对于标准Bourne shell,新shell进行了极大的改进。特别是ksh提供了历史文件、命令编辑、别名以及作业控制等特性。
Korn确保
ksh向后兼容当前的sh程序,在很短的时间内,Korn shell就成为Bell实验室的事实标准。在Unix的下一版发行时,Korn shell分发到世界范围,很快它就永久替代了Bourne shell。从那时起,Korn shell又发行了两个新的主要版本:1988年的Ksh88和1993年的Ksh93。
20世纪90年代,大量的压力要求标准化Unix。该压力导致了两个不同的运动:一个由各种组织和委员会控制、一个起源于大众需求的自由软件运动。
- 官方运动创建了一大组规范,即POSIX,
POSIX是操作系统标准化的蓝图。从实用看,可以认为POSIX是根据商业利益有组织地标准化Unix的一种尝试。POSIX标准的一个重要部分就是shell基本特性的规范,多年以来,这个标准曾经拥有过好几个名称,包括IEEE 1003.2和ISO/IEC 9445-2。对于公司、政府和其他组织来说,1003.2标准是一个重要的工作平台,它为shell开发给出了一个明确定义的基准目标。例如Ksh93就是遵循IEEE 1003.2标准设计的。但是个人并不能直接获得IEEE1003.2标准。实际上1003.2标准还需要花钱才能获得一份技术细节副本。对于大多数Unix程序员来说,占优势的理念并不是遵循一个诸如POSIX的统一标准,而是创建其他人可以自由修改和增强的自由软件。 自由软件运动导致了自由软件基金会的发展和Linux的创建,免费的Linux在用户中大获成功。Korn shell虽然优秀但却不能随Linux一起发行,因为Korn shell是属于Unix的,而Unix属于AT&T公司的商业收费产品,这样普通大众就不能免费使用它。
2000年,AT&T公司终于允许Korn shell成为一个开放源代码的产品。但为时已晚,在90年代程序员们已经创建了许多免费、开放源代码的shell,其中最重要的shell包括FreeBSD shell、Pdksh、Zsh和Bash。所有这些shell都遵循IEEE 1003.2标准,从而使它们足以替换Korn shell。Korn shell回天乏术。
FreeBsd shell是FreeBSD的默认shell,为了保持传统,它也被命名为sh---Bourne shell家族成员的标准名称。Pdksh是Korn shell的一个现代克隆体,Pdksh的编写目的是为了提供一个没有许可限制的Korn shell,因此才命名为“public domain Korn shell”。Pdksh就是一个现代版的Korn shell,既免费又开放源代码。Zsh是Paul Falstad在1990年开发的,当时他是普林斯顿大学的本科生。Zsh提供了其他Unix shell的全部重要特性,发布不久后就在全世界范围内流行开来。但从90年代中期开始,Zsh的发展就变得非常缓慢几乎停滞不前。- 在所有Bourne shell家族的成员中,目前最重要的shell是
Bash,最初由Brian Fox在1987年创建。现在Bash受到全世界程序员的支持,它是一个自由软件,由自由软件基金会发行。Bash是Linux以及基于Unix的Macintosh的默认shell,也是历史上最流行的shell。
目前Linux和Macintosh的默认shell都是Bash,所以尽管有许多shell,但是掌握Bash就足够应付大多数工作了。如无特殊情况,没必要在其他shell上花时间。