Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10724741
  • 博文数量: 2905
  • 博客积分: 20098
  • 博客等级: 上将
  • 技术积分: 36298
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-23 05:00
文章存档

2012年(1)

2011年(3)

2009年(2901)

分类: LINUX

2009-03-23 11:17:43

Shell演义之前世今生篇

作者:何晓龙
一、Shell的前世-群雄并起
    Unix以及类Unix系统中,大家经常要使用Shell,它的起源可以追溯到操作系统的鼻祖-UNIX1969年,AT&T 贝尔实验室的Ken Thompson开始利用一台闲置的 PDP-7计算机开发了一种多用户,多任务操作系统, Ken Thompson照片如图1所示。

1 Unix之父Ken Thompson(大胡子)
    过了不久,Dennis Richie也加入了这个项目,在他们共同努力下UNIX诞生了,Ken ThompsonDennis Richie的照片如图2

2 Ken ThompsonDennis Richie合作开发
        在他们的开发过程中,Dennis Richie吸取了更早的麻省理工学院一个名为MULTICS操作系统项目失败的教训,将这个操作系统命名为UNIX。早期UNIX是用汇编语言编写的,但从其第三个版本开始,他们为了提高系统的可移植性和开发效率,为UNIX专门开发了一种崭新的编程语言C,并用C语言重新编写大部分代码。
        通过这次重新编写,UNIX得以移植到更为强大的DEC PDP-11/4511/70计算机上运行。在UNIX发展早期,其源代码是公开的,并且开发文档也十分详细,所有这些都为人们进行研究提供了方便,UNIX很快成为当时欧美各大高校讲解操作系统的蓝本,所以UNIX很快成为当时校园流行的操作系统。不仅如此,加州大学伯克利分校还根据UNIX源代码,开发出了大名鼎鼎的BSD,这是UNIX的一个最著名的变种。不过好景不长,从UNIXVersion 7开始,AT&TUNIX商业化,更换了许可协议,不再允许先前自由开放的做法。
        与此同时,第一个重要的标准UNIX Shell1979年末在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 JoyBill Joy被誉为软件爱迪生,前任Sun的首席科学家,当年在Berkeley时主持开发了最早版本的BSDBill 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 shelltc-shelltcsh
        这样,Bourne ShellC Shell共存的格局形成了,使得当时的UNIX用户有了选择的权利,有了选择就会有争议,两大主流Shell即丰富了用户的选项,同时也导致了很长一段时间内,人们对哪个Shell更好的争论。就这样,时间到了20世纪80年代中期,AT&TDavid Korn推出了Korn Shell(简称为ksh)。Korn Shell1986年发布,并在1988UNIXSVR4版本发布时正式成为它的一部分。
        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一统江山,BashBourne Again Shell的缩写,自由软件基金会于开发出Bash,它的设计符合了IEEE POSIX P1003.2/ISO 9945.2 Shell和工具标准。
       Bourne Again shell诞生于1988110日,作者是Brian Fox,后来由Chet Ramey对它进行维护、加强以及修改BugBash的第一个版本是0.99。现在的版本(到目前为止的)2.05版,它主要是对2.0版本进行了加强,大家要知道自己使用的是哪个Bash版本,可以使用Bash的“-- version”选项来查看,图4Ubuntu中使用的Bash版本。

4 Ubuntu 7.10默认Bash版本
       下面来谈一下Bash的突出特点,主要表现在交互和编程两方面,Bash都提供了很多Bourne Shell没有的功能,当然,原来在Bourne Shell下编写的脚本无需修改就可以在Bash下运行。Bash融合了C shellKorn shell最有用的功能。BashBourne Shell的改进包括:命令行历史与编辑、作业控制、函数、别名、数组、整数运算(底数可以是2~64),以及Korn Shell的一些功能,如扩展的元字符,用于生成菜单的select循环和let命令等。
    
原创作品,欢迎转载,但请务必遵循保留如下声明:
本原创作品采用
阅读(898) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~