Shell演义之前世今生篇
作者:何晓龙
一、Shell
的前世-
群雄并起
在Unix
以及类Unix
系统中,大家经常要使用Shell
,它的起源可以追溯到操作系统的鼻祖-UNIX
。1969
年,AT&T
贝尔实验室的Ken Thompson
开始利用一台闲置的 PDP-7
计算机开发了一种多用户,多任务操作系统, Ken Thompson
照片如图1
所示。
图1 Unix
之父Ken Thompson(
大胡子)
过了不久,Dennis Richie
也加入了这个项目,在他们共同努力下UNIX
诞生了,Ken Thompson
和Dennis Richie
的照片如图2
。
图2 Ken Thompson
和Dennis Richie
合作开发
在他们的开发过程中,Dennis Richie
吸取了更早的麻省理工学院一个名为MULTICS
操作系统项目失败的教训,将这个操作系统命名为UNIX
。早期UNIX
是用汇编语言编写的,但从其第三个版本开始,他们为了提高系统的可移植性和开发效率,为UNIX
专门开发了一种崭新的编程语言C
,并用C
语言重新编写大部分代码。
通过这次重新编写,UNIX
得以移植到更为强大的DEC PDP-11/45
与11/70
计算机上运行。在UNIX
发展早期,其源代码是公开的,并且开发文档也十分详细,所有这些都为人们进行研究提供了方便,UNIX
很快成为当时欧美各大高校讲解操作系统的蓝本,所以UNIX
很快成为当时校园流行的操作系统。不仅如此,加州大学伯克利分校还根据UNIX
源代码,开发出了大名鼎鼎的BSD
,这是UNIX
的一个最著名的变种。不过好景不长,从UNIX
的Version 7
开始,AT&T
将UNIX
商业化,更换了许可协议,不再允许先前自由开放的做法。
与此同时,第一个重要的标准UNIX Shell
于1979
年末在Version 7 UNIX
环境推出,并以作者Stephen Bourne
的名字命名,叫做Bourne Shell
(简称为sh
)。Bourne Shell
是基于另一种叫做Algol
的语言。比较有意思的是,Bourne Shell
当时主要用于系统管理任务的自动化。此后,Bourne Shell
凭借其简单和高速而广受欢迎,很快就成为流行的Shell
。当然,Bourne Shell
也有不少缺点,如缺少一些交互的功能,如命令作业控制、历史和别名等。
而在这时
,AT&T UNIX
的一个著名分支BSD Unix
也悄然兴起,随着风头正劲的BSD
,另一个老牌Shell
也粉墨登场,它就是加州大学Berkeley
分校于20
世纪70
年代末开发,作为2BSD UNIX
系统的一部分发布的C Shell
(简称为csh
)。它的主要开发者是Bill Joy
,Bill Joy
被誉为软件爱迪生,
是
前任
Sun
的首席科学家,当年在
Berkeley
时主持开发了最早版本的
BSD
,
Bill Joy
的照片如图
3
。
图
3
软件爱迪生
Bill Joy
C Shell
提供了很多标准的Bourne Shell
不具备的功能。C shell
基于C
语言,作为编程语言使用时,语法也类似于C
,所以程序员可能会很喜欢它。此外,C Shell
还提供了增强交互使用的功能,如作业控制、命令行历史和别名等。当然,C Shell
的缺点和其优点一样明显,由于它是为大型机设计并增加了很多新功能,所以,C shell
在小型机器上运行可能比较慢。跟为麻烦的是,即使在大型机上,C Shell
的速度也不如Bourne Shell
,而这个问题,在当时的硬件条件下可以说是致命弱点了。
C Shell
之后又出现了TC Shell
,它是C Shell
的扩展版本,且具有完全兼容性。新增的功能包括:命令行编辑(
如vi)
、历史清单的滚动、高级的文件名功能、变量和命令补全、拼写纠错、作业调度、账户自动上锁和注销、历史清单中增加时间戳等。新增的功能确实很多。
人们经常会问“TC shell
中的T
到底代表什么含义呢?”这就要涉及到一段历史。1976
年,DEC
发布了一种新的虚拟内存操作系统――TOPS-20
,这种操作系统基于 TENEX
,可以被美国国内的多个研究人员同时使用。TOPS-20
最显著的特点是“遗忘识别”,也称为“命令补全”,用户可以借助Esc
键获取大多数的命令或助记符,从而使得系统能正常运行。TC shell
的创建者受到TENEX/TOPS-20
的这个功能以及其他功能的影响,开发了csh
的一种版本,并模仿TENEX
的名称,将这种shell
称为TENEX C shell
,简称为TC shell
、tc-shell
或tcsh
。
这样,Bourne Shell
和C Shell
共存的格局形成了,使得当时的UNIX
用户有了选择的权利,有了选择就会有争议,两大主流Shell
即丰富了用户的选项,同时也导致了很长一段时间内,人们对哪个Shell
更好的争论。就这样,时间到了20
世纪80
年代中期,AT&T
的David Korn
推出了Korn Shell
(简称为ksh
)。Korn Shell
于1986
年发布,并在1988
年UNIX
的SVR4
版本发布时正式成为它的一部分。
Korn Shell
其实是Bourne shell
的一个扩展集,它提供了对Bourne shell
的向上兼容性,并且融入入了许多C Shell
中受大家欢迎的功能,在兼收并蓄的同时,并没有牺牲速度和效率,恰恰相反,Korn Shell
本身很快速和高效。Korn Shell
经历了许多版本,虽然1993
版正逐渐流行,目前用得最广泛的还是1988
版,
时至今日,Korn Shell
几乎是多数Unix
的标准Shell
。
Korn Shell
推出后,又出现了Z Shell(zsh)
,它是Korn Shell
的克隆版,集成了TC shell
的一些功能。Z shell
的作者是Paul Falsted
,大家可以从网上免费获的。
二、Shell
的今生-
重归一统
Shell
发展到今天,几乎没有什么悬念了,主要是受到图形界面(GUI
)技术兴起冲击,大家操作计算机的方式也发生了质的改变,文字界面由主流变为辅助。在Unix
领域,是Korn Shell
的天下,而在Linux
的地盘,则是Bash
一统江山,Bash
是Bourne Again Shell
的缩写,自由软件基金会于开发出Bash,
它的设计符合了IEEE POSIX P1003.2/ISO 9945.2 Shell
和工具标准。
Bourne Again shell
诞生于1988
年1
月10
日,作者是Brian Fox
,后来由Chet Ramey
对它进行维护、加强以及修改Bug
。Bash
的第一个版本是0.99
。现在的版本(
到目前为止的)
是2.05
版,它主要是对2.0
版本进行了加强,
大家要知道自己使用的是哪个Bash
版本,可以使用Bash
的“-- version
”选项来查看,图4
为Ubuntu
中使用的Bash
版本。
图4 Ubuntu 7.10
默认Bash
版本
下面来谈一下Bash
的突出特点,主要表现在交互和编程两方面,Bash
都提供了很多Bourne Shell
没有的功能,当然,原来在Bourne Shell
下编写的脚本无需修改就可以在Bash
下运行。Bash
融合了C shell
和Korn shell
最有用的功能。Bash
对Bourne Shell
的改进包括:命令行历史与编辑、作业控制、函数、别名、数组、整数运算(
底数可以是2~64)
,以及Korn Shell
的一些功能,如扩展的元字符,用于生成菜单的select
循环和let
命令等。
原创作品,欢迎转载,但请务必遵循保留如下声明:
本原创作品采用
知识共享署名-
相同方式共享 3.0
许可协议
进行许可。
转载请注明
作者:何晓龙,
出处: [url]www.UbuntuChina.com[/url]
原始链接: [url]http://www.ubuntuchina.com/viewthread.php?tid=1703&extra=page%3D1[/url]
本文出自 “跟晓龙学Linux” 博客,转载请与作者联系!