Shell自己是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。做为命令语言,它交互式地解释和执行用户输入的命令;做为程序设计语言,它定义了各类变量和参数,并提供了许多在高级语言中才具备的控制结构,包括循环和分支。 shell
它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、创建文件并以并行的方式协调各个程序的运行。所以,对于用户来讲,shell是最重要的实用程序,深刻了解和熟练掌握shell的特性极其使用方法,是用好Linux系统的关键。 编程
能够说,shell使用的熟练程度反映了用户对Linux使用的熟练程度。 数组
Shell有两种执行命令的方式: 安全
•交互式(Interactive):解释执行用户的命令,用户输入一条命令,Shell就解释执行一条。 bash
•批处理(Batch):用户事先写一个Shell脚本(Script),其中有不少条命令,让Shell一次把这些命令执行完,而没必要一条一条地敲命令。 数据结构
Shell脚本和编程语言很类似,也有变量和流程控制语句,但Shell脚本是解释执行的,不须要编译,Shell程序从脚本中一行一行读取并执行这些命令,至关于一个用户把脚本中的命令一行一行敲到Shell提示符下执行。 socket
Shell初学者请注意,在日常应用中,建议您不要用 root 账号运行 Shell 。做为普通用户,无论您有意仍是无心,都没法破坏系统;但若是是 root,那就不一样了,只要敲几个字母,就可能致使灾难性后果。 编程语言
几种常见的Shell
函数
上面提到过,Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本。 性能
Linux上常见的Shell脚本解释器有bash、sh、ash、csh、ksh,习惯上把它们称做一种Shell。咱们常说有多少种Shell,其实说的是Shell脚本解释器。
bash
bash是Linux系统默认使用的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。
Linux使用它做为默认的shell是由于它有诸如如下的特点:
•可使用相似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。
•自动经过查找匹配的方式给出以某字符串开头的命令。
•包含了自身的帮助功能,你只要在提示符下面键入help就能够获得相关的帮助。
sh
sh 由Steve Bourne开发,是Bourne Shell的缩写,各类UNIX系统都配有sh。
ash
ash shell 是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,于是使用起来很不方便。csh
csh 是Linux比较大的内核,它由以William Joy为表明的共计47位做者编成,共有52个内部命令。该shell实际上是指向/bin/tcsh这样的一个shell,也就是说,csh其实就是tcsh。
ksh
ksh 是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell最大的优势是几乎和商业发行版的ksh彻底兼容,这样就能够在不用花钱购买商业版本的状况下尝试商业版本的性能了。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。何时使用Shell
由于Shell彷佛是各UNIX系统之间通用的功能,而且通过了POSIX的标准化。所以,Shell脚本只要“用心写”一次,便可应用到不少系统上。所以,之因此要使用Shell脚本是基于:
•简单性:Shell是一个高级语言;经过它,你能够简洁地表达复杂的操做。
•可移植性:使用POSIX所定义的功能,能够作到脚本无须修改就可在不一样的系统上执行。
•开发容易:能够在短期内完成一个功能强大又妤用的脚本。
1.资源密集型的任务,尤为在须要考虑效率时(好比,排序,hash等等)。 2.须要处理大任务的数学操做,尤为是浮点运算,精确运算,或者复杂的算术运算(这种状况通常使用C++或FORTRAN 来处理)。 3.有跨平台(操做系统)移植需求(通常使用C 或Java)。 4.复杂的应用,在必须使用结构化编程的时候(须要变量的类型检查,函数原型,等等)。 5.对于影响系统全局性的关键任务应用。 6.对于安全有很高要求的任务,好比你须要一个健壮的系统来防止入侵、破解、恶意破坏等等。 7.项目由连串的依赖的各个部分组成。 8.须要大规模的文件操做。 9.须要多维数组的支持。 10.须要数据结构的支持,好比链表或数等数据结构。 11.须要产生或操做图形化界面 GUI。 12.须要直接操做系统硬件。 13.须要 I/O 或socket 接口。 14.须要使用库或者遗留下来的老代码的接口。 15.私人的、闭源的应用(shell 脚本把代码就放在文本文件中,全世界都能看到)。
若是你的应用符合上边的任意一条,那么就考虑一下更强大的语言吧——或许是Perl、Tcl、Python、Ruby——或者是更高层次的编译语言好比C/C++,或者是Java。即便如此,你会发现,使用shell来原型开发你的应用,在开发步骤中也是很是有用的。