Linux Shell进化简史

发表于:2011-12-26 10:12

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:张志平 译    来源:51Testing软件测试网采编

  导读:M.Tim Jones 是 developerWorks 全球网站的一位多产撰稿人,他的文章涉及的主题非常广泛而有深度。Tim 为了让大家全面了解 Linux,推出了一系列内核剖析方面的文章,深受大家的欣赏;随着 Linux 在虚拟化技术方面的日臻成熟,Tim 及时为我们带来了相关内容的介绍。在本文中,他为我们带来了Linux Shell的进化史。以下为全文

  计算机上的大多数日常工作任务,通过鼠标点击即可完成,但要想真正发挥Linux本身的威力,还需要Shell和命令行。Shell就如同编辑器一样,你可以根据个人爱好选择。虽然不同的Shell可以提供不同的功能,但是它们的核心开发思想都是一致的。

  现在让我们来追寻Shell的发展足迹,并探讨几个现在流行的Shell。

  Shell的历史

  Shell也称命令行解释器,有着悠久的历史,我们从第一个UNIX Shell说起。

  V6 Shell

  1971年,贝尔实验室的Ken Thompson为UNIX开发了第一个Shell——V6 Shell。类似于它在Multics上的前身,V6 Shell(/bin/sh)是一个在内核之外执行的独立的用户程序。

  诸如通配符(模式匹配参数扩展,如*.txt)之类的概念在独立的glob实用程序中实现,如同if命令评估条件表达式一样。这种实现保证了Shell的短小精悍,它只有不到900行的C源代码。

  V6 Shell引入了一系列简洁的语法,用于重定向(< >和>>)和管道(|或^),并一直沿用至今。你也会发现,它提供了对顺序调用命令(;)和异步命令(&)的支持。

  Thompson Shell(即V6 Shell)的缺陷在于脚本编程能力的不足,它只是一个交互性的命令解释器。

  Bourne Shell

  1977年,Stephen Bourne在贝尔实验室为V7 UNIX开发了Bourne Shell,并一直沿用至今。很多情况下,它甚至是默认的Shell。Bourne Shell是用C语言开发的,但相比其他Shell,其语法更类似于算法语言(ALGOL)。

  Bourne Shell的设计有两个目标:作为命令行解释器交互执行操作系统命令和脚本编程。

  为了取代Thompson Shell,Bourne Shell有着巨大的优势:

  1、在脚本中引入了控制流、循环和变量,提供了更强大的语言与操作系统交互

  2、允许使用脚本作为筛选器,为处理信号提供集成支持,但缺乏自定义函数机制

  3、纳入了一系列今天我们仍在使用的功能,包括命令替换、here-document等

  Bourne Shell在前进的道路上迈出了至关重要的一步,同时也成了其他派生Shell的基石。Bourne Shell的出现推动了Korn shell (ksh)、Almquist Shell(ash)和流行的Bourne Again Shell(Bash)的开发,在Bourne Shell发布之际,C Shell也已在开发之中。下图显示了Shell之间的血缘关系。

图一:Shell之间的传承

  Shell的基础架构

  Linux Shell的基础架构并不复杂,如下图所示。

图二:Linux Shell基础架构示意图

  Linux Shell的架构看起来非常类似于一条管道,对输入进行语法解析、符号扩展,最后执行。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号