什么是shell?    

shell是一种具有特殊用途的程序,主要用于读取用户输入的命令,并执行相应的程序以响应命令。有时,人们也称之为命令解释器。术语登录shell (login shel)是指用户刚登录系统时,由系统创建,用以运行shell 的进程。

 

尽管某些操作系统将命令解释器集成于内核中,而对UNIX系统而言,shell 只是一个用户进程。shell的种类繁多,登入同一台计算机的不同用户同时可使用不同的shell (就单个用户来说,情况也一一样)。纵观UNIX历史,出现过以下几种重要的shell

  • Bourme shell (sh):这款由Steve Boure编写的shell历史最为悠久,且应用广泛,曾是第七版UNIX的标配shell。Boume shell包含了在其他shell中常见的许多特性,I0重定向、管道、文件名生成(通配符)、变量、环境变量处理、命令替换、后台命令执行以及函数。对于所有问世于第七版UNIX之后的实现而言,除了可能提供有其他shell之外,都附带了Boume shell.

 

 

  • C shell (csh): 由Bill Joy于加州大学伯克利分校编写而成。其命名则源于该脚本语言的流控制语法与C语言有着许多相似之处。C shell 当时提供了若干极为实用的交互式特性,并不为Bourne shell 所支持,这其中包括命令的历史记录、命令行编辑功能、任务控制和别名等。C shell与Bourme shell并不兼容。尽管C shell曾是BSD系统标配的交互式shell,但一般情况下,人们还是喜欢针对Boume shell编写shell脚本(稍后介绍),以便其能够在所有UNIX实现上移植。

 

  • Kom shell (ksh): AT&T贝尔实验室的David Kom编写了这款shell,作为Boume shell的“继任者”。在保持与Boure shell 兼容的同时,Kom shell还吸收了那些与c shell相类似的交互式特性。

 

  • Boume again shell (hash); 这款shell是GNU项目对Bourme shell的重新实现。Bash :提供了与C sell和Kom shel所类似的交互式特性。Brian Fox和Chet Ramey是bash .的主要作者。bash或许是Linux上应用最为广泛的sell了。在Lioux上,Boumesel (sh)其实正是由bash仿真提供的。

     设计shell的目的不仅仅是用于人机交互,对shell脚本(包含shell命令的文本文件)进行行解释也是其用途之一。为实现这一目的,每款shell都内置有许多通常与编程语言相关的功能,其中包括变量、循环和条件语句、I/O 命令以及及函数等。 

     尽管在语法方面有所差异,每款shell执行的任务都大致相同。