什么是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比起来也显得缓慢。
有了Bourne shell和C shell之后,UNIX 使用者就有了选择,且争论那一个 shell较好。AT&T 的David Korn 在80 年代中期发明了Korn shell,在1986 年发行且在1988 年成为正式的部分SVR4 UNIX。Korn shell实际上是Bourne shell的超集,且不只可在UNIX系统上执行,同时也可在OS/2、VMS、和DOS上执行。它提供了和Bourne shell向上兼容的能力,且增加了许多在C shell上受欢迎的特色,更增加了速度和效率。 Korn shell已历经许多修正版,要找寻您使用的是那一个版本可在ksh 提示符号下按 Ctrl-v 键。