shell第二篇

第二篇
知道shell是什么,再来了解一下shell的分类及相关历史
参考百度百科:shell


1、shell概念(计算机壳层)

在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。
它类似于DOS下的command.com。它接收用户命令,然后调用相应的应用程序。

同时它又是一种程序设计语言。
作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;
作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。
在C++中,Shell是希尔排序的名称。   

2、基本上shell分两大类:   

一、图形界面shell(Graphical User Interface shell 即 GUI shell)   

例如:

应用最为广泛的 Windows Explorer (微软的windows系列制作系统),
还有也包括广为人知的 Linux shell,其中linux shell 包括 X windows manger (BlackBox和FluxBox),
以及功能更强大的CDE、GNOME、KDE、 XFCE。

二、命令行式shell(Command Line Interface shell ,即CLI shell)   

例如:

1.bash / sh / ksh / csh(Unix/linux 系统)

2.COMMAND.COM(MS-DOS 系统)

3.cmd.exe / 命令提示字符(Windows NT 系统)

4.Windows PowerShell(支援 .NET Framework 技术的 Windows NT 系统)

传统意义上的shell指的是命令行式的shell,以后如果不特别注明,shell是指命令行式的shell。

三、其他分类方式

交互式shell和非交互式shell

交互式模式就是shell等待你的输入,并且执行你提交的命令。
这种模式被称作交互式是因为shell与用户进行交互。
这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。

非交互式模式。
在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。
当它读到文件的结尾,shell也就终止了。

3、shell的类型(历史)

壳层(shell)这个说法起源于路易斯·普赞,他在1964年至1965年间首次提出,随后在Multics项目中首次被实现出来。
Unix上的第一个Unix壳层(Unix shell)是肯·汤普逊以Multics上的shell为范本,所写出的Thompson shell。
在微软的Windows操作系统也提供了命令行壳层的功能,它们是Windows 95 / 98下的command.com、Windows NT内核下的cmd.exe以及PowerShell;而图形界面壳层即为explorer.exe。

在UNIX中主要有(Command Line Interface shell,命令行式shell)

Bourne shell (包括 sh, ksh, and bash)
Korn shell ( ksh)
Bourne Again shell ( bash)
POSIX shell ( sh)
C shell (包括 csh and tcsh)
C shell ( csh)
TENEX/TOPS C shell ( tcsh)

各版本介绍

Bourne Shell

首个重要的标准Unix Shell是1970年底在V7 Unix(AT&T第7版)中引入的,
并且以它的创始科技部基础条件平台“国家气象网络计算应用节点建设”(2004DKA50730)资助者Stephen Bourne的名字命名。
Bourne shell 是一个交换式的命令解释器和命令编程语言。
Bourne shell 可以运行为login shell或者login shell的子shell(subshell)。
只有login命令可以调用Bourne shell作为一个login shell。
此时,shell先读取/etc/profile文件和$HOME/.profile文件。
/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用户定制环境。
最后,shell会等待读取你的输入。

C Shell

Bill Joy于20世纪80年代早期,在Berkeley的加利福尼亚大学开发了C shell。
它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。
它新增了命令历史、别名、文件名替换、作业控制等功能。

Korn Shell

有很长一段时间,只有两类shell供人们选择,Bourne shell用来编程,C shell用来交互。
为了改变这种状况,AT&T的bell实验室David Korn开发了Korn shell。
ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。
因此,Korn shell广受用户的欢迎。
它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。
Korn Shell 是一个交互式的命令解释器和命令编程语言.它符合POSIX——一个操作系统的国际标准.
POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准——在源程序一级跨越多种平台。

Bourne Again Shell (bash)

bash是GNU计划的一部分,用来替代Bourne shell。
它用于基于GNU的系统如Linux.大多数的Linux(Red Hat, Slackware, Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。

POSIX Shell

POSIX shell 是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。
在HP-UX 11.0 , POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh.

各主要操作系统下缺省的shell:

AIX 下是Korn Shell.
Solaris缺省的是Bourne shell.
FreeBSD缺省的是C shell
HP-UX缺省的是POSIX shell.
Linux是Bourne Again shell.

Windows PowerShell 是一种新的交互式的命令行和基于任务脚本编写技术,它使信息技术 (IT) 管理员能够全面地自动操作和控制系统管理任务,从而提高了管理员的生产力。
Windows PowerShell 包括多个系统管理实用工具、一致的语法和命名惯例、及对普通管理数据更好地导航,如登记、证书存储 或 Windows Management Instrumentation (WMI)。
Windows PowerShell 还专门针对 IT 管理,提供直观的脚本编写语言。
Shell也是一个VB函数,它的作用是运行程序,语法是Shell(命令字符串[,窗口类型])

4、shell功能及理解

文字操作系统与外部最主要的接口就叫做shell。
shell是操作系统最外面的一层。
shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。

shell提供了你与操作系统之间通讯的方式。
这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell script(非交互)方式执行。
shell script是放在文件中的一串shell和操作系统命令,它们可以被重复使用。
本质上,shell script是命令行命令简单的组合到一个文件里面。

Shell基本上是一个命令解释器,类似于DOS下的command.com。它接收用户命令(如ls等),然后调用相应的应用程序。
较为通用的shell有标准的Bourne shell (sh)和C shell (csh)。

shell是一个命令解释器。是计算机用户和计算机操作系统内核之间的翻译。
计算机用户在操作计算机是输入的指令都是以人类语言来表示的。
而计算机在内部进行信息处理是使用的都是二进制。
所以shell会将用户的输入转换成计算机能够识别的信息。
计算机处理完成后再有shell转换成人能够识别的信息输出。

解释器(英语:Interpreter),又译为直译器,是一种电脑程序,能够把高级编程语言一行一行直接转译运行。
解释器不会一次把整个程序转译出来,只像一位“中间人”,每次运行程序时都要先转成另一种语言再作运行;
因此解释器的程序运行速度比较缓慢。它每转译一行程序叙述就立刻运行,然后再转译下一行,再运行,如此不停地进行下去。

使用解释器来运行程序会比直接运行编译过的机器码来得慢,但是相对的这个直译的行为会比编译再运行来得快。
这在程序开发的雏型化阶段和只是撰写试验性的代码时尤其来得重要,
因为这个“编辑-直译-除错”的循环通常比“编辑-编译-运行-除错”的循环来得省时许多。

在解释器上运行程序比直接运行编译过的代码来得慢,是因为解释器每次都必须去分析并转译它所运行到的程序行,
而编译过的程序就只是直接运行。
这个在运行时的分析被称为"直译式的成本"。
在解释器中,变量的访问也是比较慢的,因为每次要访问变量的时候它都必须找出该变量实际存储的位置,
而不像编译过的程序在编译的时候就决定好了变量的位置了。
摘自百度百科:解释器(http://baike.baidu.com/link?url=5vyIJLrXduMywYnb2uRqrOVuAE9a-CcexIKoJZqGKfH-KyfgUDf4AIyCkj_N2pX6BOtdq63YjLQdtGi1vHy3ZTVGB4NQ5bFm5TqrlWnHLLpZv2L0nCwH6S0_Chyoha2D)

 

5、Shell与编译型语言的差异

大体上,可以将程序设计语言可以分为两类:编译型语言和解释型语言。

编译型语言

很多传统的程序设计语言,例如Fortran、Ada、Pascal、C、C++和Java,都是编译型语言。
这类语言需要预先将我们写好的源代码(source code)转换成目标代码(object code),这个过程被称作“编译”。
运行程序时,直接读取目标代码(object code)。由于编译后的目标代码(object code)非常接近计算机底层,因此执行效率很高,这是编译型语言的优点。
但是,由于编译型语言多半运作于底层,所处理的是字节、整数、浮点数或是其他机器层级的对象,往往实现一个简单的功能需要大量复杂的代码。
例如,在C++里,就很难进行“将一个目录里所有的文件复制到另一个目录中”之类的简单操作。

解释型语言

解释型语言也被称作“脚本语言”。
执行这类程序时,解释器(interpreter)需要读取我们编写的源代码(source code),并将其转换成目标代码(object code),再由计算机运行。
因为每次执行程序都多了编译的过程,因此效率有所下降。
使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象;缺点是它们的效率通常不如编译型语言。
不过权衡之下,通常使用脚本编程还是值得的:花一个小时写成的简单脚本,同样的功能用C或C++来编写实现,可能需要两天,
而且一般来说,脚本执行的速度已经够快了,快到足以让人忽略它性能上的问题。
脚本编程语言的例子有awk、Perl、Python、Ruby与Shell。

原文地址:https://www.cnblogs.com/irockcode/p/6944514.html