Shell自己是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工做都是经过Shell完成的。Shell既是一种命令语言,又是一种程序设计语言。做为命令语言,它交互式地解释和执行用户输入的命令;做为程序设计语言,它定义了各类变量和参数,并提供了许多在高级语言中才具备的控制结构,包括循环和分支。
它虽然不是Unix/Linux系统内核的一部分,但它调用了系统核心的大部分功能来执行程序、创建文件并以并行的方式协调各个程序的运行。所以,对于用户来讲,shell是最重要的实用程序,深刻了解和熟练掌握shell的特性极其使用方法,是用好Unix/Linux系统的关键。
能够说,shell使用的熟练程度反映了用户对Unix/Linux使用的熟练程度。linux
Shell有两种执行命令的方式:shell
Shell脚本和编程语言很类似,也有变量和流程控制语句,但Shell脚本是解释执行的,不须要编译,Shell程序从脚本中一行一行读取并执行这些命令,至关于一个用户把脚本中的命令一行一行敲到Shell提示符下执行。
Shell初学者请注意,在日常应用中,建议不要用 root 账号运行 Shell 。做为普通用户,无论您有意仍是无心,都没法破坏系统;但若是是 root,那就不一样了,只要敲几个字母,就可能致使灾难性后果。编程
Unix/Linux上常见的Shell脚本解释器有bash、sh、csh、ksh等,习惯上把它们称做一种Shell。咱们常说有多少种Shell,其实说的是Shell脚本解释器。bash
bash是Linux标准默认的shell,本教程也基于bash讲解。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。
Linux使用它做为默认的shell是由于它有诸如如下的特点:编程语言
sh 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。性能
ash shell 是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,于是使用起来很不方便。ui
csh 是Linux比较大的内核,它由以William Joy为表明的共计47位做者编成,共有52个内部命令。该shell实际上是指向/bin/tcsh这样的一个shell,也就是说,csh其实就是tcsh。设计
ksh 是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell最大的优势是几乎和商业发行版的ksh彻底兼容,这样就能够在不用花钱购买商业版本的状况下尝试商业版本的性能了。
注意:bash是 Bourne Again Shell 的缩写,是linux标准的默认shell ,它基于Bourne shell,吸取了C shell和Korn shell的一些特性。bash彻底兼容sh,也就是说,用sh写的脚本能够不加修改的在bash中执行。code
不少传统的程序设计语言,例如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。