Linux Shell编程从入门到精通(第2版)
上QQ阅读APP看书,第一时间看更新

1.4 Linux Shell是解释型语言

计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。

1.4.1 编译型语言与解释型语言

翻译的方式有两种,一种是编译(compile),另一种是解释(interpret)。两种方式只是翻译的时间不同。编译型语言写在程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,例如,Windows系统中的EXE文件。编译好后运行该文件的话就不用重新翻译了,直接使用编译的结果就行。因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。Linux中的许多外部命令都是这种类型,它们的文件格式是二进制文件。

解释型语言则不同,解释型语言的程序不需要编译,省了道工序,但在其运行程序的时候需要翻译,例如,Linux Shell语言中,专门有一个解释器能够直接执行程序(/bin/sh或者bash, zsh, csh等),每个语句都是执行的时候才翻译。这样解释型语言每执行一句就要翻译一次,效率比较低。

编译型语言与解释型语言的差异如下。

(1)许多中型、大型的程序都是用编译型语言写成。例如,C/C++,JavaJava并不是严格地被翻译成机器语言,而是被编译成字节码,然后用解释方式执行字节码。,Fortran 等。这些大型语言的源代码(source code)需要经过编译才能转化为目标代码(object code),机器才可读、可执行。

(2)编译型语言的优点是高效。缺点是难以执行上层的一些简单操作,因为编译型语言运行于机器底层。例如,在C++中就难以对某目录下的所有文件执行批量重命名。

(3)脚本语言都是解释型语言。解释型语言在UNIX系统中很常见,例如Shell、Perl、Python、awk、Ruby等。

(4)解释型语言的执行层面高于编译型语言,因此可以轻松地进行一些高级操作。功能强大的解释性语言往往被称为胶水语言(如python),可以迅速地利用各种工具和语言属性搭建想要的功能。脚本语言被广泛应用于系统管理、模型搭建等领域。但解释型语言的劣势也十分明显:执行效率低。

这里要特别讲一下Python。Python是一种解释型的语言。但是为了效率考虑,Python也提供了编译的方法。编译之后是bytecode的形式。Python也提供了和Java类似的VM来执行这样的bytecode。不同的是,因为Python是一种解释型的语言,所以编译(compile)不是一个强制的操作。事实上,编译是一个自动的过程。多数情况下,你甚至不会留意到它的存在。编译成bytecode可以节省加载模块的时间,从而提高效率。

1.4.2 Linux Shell编程的优势

使用Linux Shell作为编程工具的优势在于,它运行在高于系统内核的环境,能够简单地执行一些文件系统级的高级操作。因此,迅速地搭建系统,维护需要的功能变成可能。这种特性,也使得Linux Shell的编程效率十倍、百倍的高于其他编译型语言。由于Linux众多工具的支持,往往用编译型语言需要若干天的工作,熟练的Linux Shell程序员只要几个小时就可以让程序运行地很好。Linux Shell编程的优势有以下几点。

1.简洁性

Linux Shell所处的内核外层环境使得任何高级操作成为可能。

2.开发容易

GNU 多年的千锤百炼使得 UNIX/Linux 的工具集变成程序员手中的利器,并很好地遵循了UNIX哲学使开发前人的积累上变得容易。

3.便于移植

由于POSIX接口的支持,只要你不使用一些危险特性(被部分操作系统支持,但不被POSIX接口支持),Linux Shell只要写一次,往往能无障碍地运行于众多UNIX/Linux版本上。