快捷搜索:

Linux操作系统的Shell简介及其分类

什么是 Shell?

Shell是一种具备特殊功能的法度榜样,它是介于应用者和 UNIX/Linux 操作系统之核心法度榜样(kernel)间的一个接口。为什么我们说 shell 是一种介于系统核心法度榜样与应用者间的中介者呢?读过操作系统概论的读者们都知道操作系统是一个系统资本的治理者与分配者,当您有需求时,您得向系统提出;从操作系统的角度来看,它也必须防止应用者由于差错的操作而造成系统的危害?众所周知,对谋略机下敕令得透过敕令(command)或是法度榜样(program);法度榜样有编译器(compiler)将法度榜样转为二进制代码,可是敕令呢?着实shell 也是一支法度榜样,它由输入设备读取敕令,再将其转为谋略机可以懂得的机器码,然后履行它。

各类操作系统都有它自己的 shell,以 DOS 为例,它的 shell 便是 command.com 檔。犹如 DOS 下有 NDOS,4DOS,DRDOS 等不合的敕令解译法度榜样可以取代标准的 command.com ,UNIX 下除了 Bourne shell(/bin/sh) 外还有 C shell(/bin/csh)、Korn shell(/bin/ksh)、Bourne again shell(/bin/bash)、Tenex C shell(tcsh) … 等其它的 shell。UNIX/Linux 将 shell 自力于核心法度榜样之外,使得它就犹如一样平常的利用法度榜样,可以在不影响操作系统本身的环境下进行改动、更新版本或是添加新的功能。

Shell 的激活

在系统起动的时刻,核心法度榜样会被加载内存,认真治理系统的事情,直到系统关闭为止。它建立并节制着处置惩罚法度榜样,治理内存、档案系统、通讯等等。而其它的法度榜样,包括 shell 法度榜样,都寄放在磁盘中。核心法度榜样将它们加载内存,履行它们,并且在它们中止后清理系统。Shell 是一个公用法度榜样,它在您签入时起动。藉由解译应用者输入的敕令(由敕令列或敕令档),Shell 供给应用者和核心法度榜样孕育发生交谈的功能。

当您签入(login)时,一个交谈式的shell 会随着起动,并提示您输入敕令。在您键入一个敕令后,接着便是 shell 的事情了,它会进行:

1. 语法阐发敕令列。

2. 处置惩罚万用字符(wildcards)、转向(redirection)、管线(pipes)与事情节制(job control)。

3. 征采并履行敕令。

当您刚开始学UNIX/Linux系统时,您大年夜部份的光阴会花在于提示符号(prompt)下履行敕令。

假如您常常会输入一组相同形式的敕令,您可能会想要自动履行那些事情。如斯,您可以将一些敕令放入一个档案(称为敕令档,script),然后履行该档。一个shell 敕令档很像是 DOS 下的批次檔(如 Autoexec.bat):它把连续串的 UNIX 敕令存入一个档案,然后履行该档。较成熟的敕令档还支持多少今世法度榜样说话的节制布局,譬如说能做前提判断、轮回、档案测试、传送参数等。要写着写敕令档,不仅要进修法度榜样设计的布局和技术,而且对 UNIX/Linux 公用法度榜样及若何运作需有深入的懂得。有些公用法度榜样的功能异常强大年夜(例如 grep、sed 和awk),它们常被用于敕令档来操控敕令输出和档案。在您对那些对象和法度榜样设计布局变得认识之后,您就可以开始写敕令档。当由敕令档履行敕令时,此刻,您就已经把 shell 当做法度榜样说话应用了。

细说 Shell 的一生

第一个有紧张意义的,标准的 UNIX shell 是V7(AT&T的第七版)UNIX,在1979 岁尾被提出,且以它的创造者 Stephen Bourne 来命名。Bourne shell 因此 Algol 这种说话为根基来设计,主要被用来做自动化系统治理事情。虽然 Bourne shell 以简单和速率而受迎接,但它缺少许多交谈性应用的特色,例如过程、又名和事情节制。

C shell 是在加州大年夜学柏克来分校于70年代末期成长而成,而以2BSD UNIX的部分发行。这个 shell 主如果由 Bill Joy 写成,供给了一些在标准 Bourne shell 所看不到的额外特色。C shell 因此C 法度榜样说话作为根基,且它被用来当法度榜样说话时,能共享类似的语法。它也供给在交谈式运用上的改进,例如敕令列过程、又名和事情节制。由于 C shell 是在大年夜型机械上设计出来,且增添了一些额外功能,以是 C shell 有在小型机械上跑得较慢,纵然在大年夜型机械上跟 Bourne shell 比起来也显得迟钝。

Korn shell 是Bourne shell 的超集(superset),由 AT&T 的 David Korn 所开拓。它增添了一些特色,比 C shell 更为先辈。Korn shell 的特色包括了可编辑的过程、又名、函式、正规表达式万用字符(regular expression wildcard)、内建算术、事情节制(job control)、共作处置惩罚(coprocessing)、和特殊的除错功能。Bourne shell 险些和 Korn shell 完全向上兼容(upward compatible),以是在 Bourne shell 下开拓的法度榜样仍能在 Korn shell 上履行。Korn shell 提示符号的默认值也是 $。在 Linux 系统应用的 Korn shell 叫做 pdksh,它是指 Public Domain Korn Shell。

除了履行效率稍差外,Korn shell 在许多方面都比 Bourne shell 为佳;然则,若将 Korn shell 与 C shell 比拟就很艰苦,由于二者在许多方面都各有千秋,就效率和轻易应用上看,Korn shell 是优于 C shell,信托许多应用者对付 C Shell 的履行效率都有负面的印象。

在shell 的语法方面,Korn shell 是对照靠近一样平常法度榜样说话,而且它具有子法度榜样的功能及供给较多的资料型态。至于 Bourne shell,它所拥有的资料型态是三种 shell 中起码的,仅供给字符串变量和布尔型态。在整体考量下 Korn shell 是三者中体现最佳者,其次为 C shell,着末才是 Bourne shell,然则在实际应用中仍有其它应列入斟酌的身分,如速率是最紧张的选择时,很可能应该采纳 Bourne shell,因它是最基础的 shell,履行的速率最快。

tcsh 是近几年崛起的一个免费软件(Linux 下的C shell 着实便是应用 tcsh)履行,它虽然不是UNIX 的标准配备,然则从许多地方您都可以下载到它。假如您是 C shell 的拥护者,笔者建议不妨试试 tcsh,由于您至少可以将它算作是 C shell 来应用。假如您乐意花点光阴进修,您还可以享受许多它新增的良好功能,例如:

您可能还会对下面的文章感兴趣: