标题：脚本语言
简介
脚本语言是为了缩短传统的编写-编译-链接-运行（edit-compile-link-run）过程而创建的计算机编程语言。[1]它的命名起源于一个脚本“screenplay”，每次运行都会使对话框逐字重复。早期的脚本语言经常被称为批量处理语言或工作控制语言。[2]
一个脚本通常是解释运行而非编译。脚本语言通常都有简单、易学、易用的特性，目的就是希望能让程序员快速完成程序的编写工作。而宏语言则可视为脚本语言的分支，两者也有实质上的相同之处。[3]　
（概述图片来源：[4]）
特点
1、脚本语言(JavaScript，VBscript等)介于HTML和C,C++,Java,C#等编程语言之间。　HTML通常用于格式化和链接文本。而编程语言通常用于向机器发出一系列复杂的指令。 　
2、脚本语言与编程语言也有很多相似地方，其函数与编程语言比较相像一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些. 
3、与程序代码的关系：脚本也是一种语言，其同样由程序代码组成。 
注：脚本语言一般都有相应的脚本引擎来解释执行。 他们一般需要解释器才能运行。Python、JAVASCRIPT,ASP,PHP,PERL,Nuva都是脚本语言。C/C++编译、链接后，可形成独立执行的exe文件。 
4、脚本语言是一种解释性的语言,例如Python、vbscript,javascript,installshield script,ActionScript等等,它不象c\c++等可以编译成二进制代码,以可执行文件的形式存在，脚本语言不需要编译，可以直接用，由解释器来负责解释。 　
5、脚本语言一般都是以文本形式存在,类似于一种命令。
举个例子说：如果建立了一个程序,叫aaa.exe，可以打开.aa为扩展名的文件，为.aa文件的编写指定了一套规则(语法)，当别人编写了.aa文件后，自己的程序用这种规则来理解编写人的意图，并作出回应，那么，这一套规则就是脚本语言。[5]
6、相对于编译型计算机编程语言：用脚本语言开发的程序在执行时，由其所对应的解释器（或称虚拟机）解释执行。系统程序设计语言是被预先编译成机器语言而执行的。脚本语言的主要特征是：程序代码即是脚本程序，亦是最终可执行文件。脚本语言可分为独立型和嵌入型，独立型脚本语言在其执行时完全依赖于解释器，而嵌入型脚本语言通常在编程语言中（如C，C++，VB，Java等）被嵌入使用。[1][6]　
7、和系统程序设计语言相比：不同是脚本语言是被解释而系统程序设计语言是被编译。被解释的语言由于没有编译时间而提供快速的转换，通过允许用户运行时编写应用程序，而不需要耗时的编译/打包过程。解释器使应用程序更加灵活，脚本语言的代码能够被实时生成和执行。脚本语言通常都有简单、易学、易用的特性，目的就是希望能让程序设计师快速完成程序的编写工作。[1]
优缺点
优点
快速开发：脚本语言极大地简化了“开发、部署、测试和调试”的周期过程。 
容易部署：大多数脚本语言都能够随时部署，而不需要耗时的编译/打包过程。 
同已有技术的集成：脚本语言被Java或者COM这样的组件技术所包围，因此能够有效地利用代码。 
易学易用：很多脚本语言的技术要求通常要低一些，因此能够更容易地找到大量合适的技术人员。 
动态代码：脚本语言的代码能够被实时生成和执行，这是一项高级特性，在某些应用程序里（例如JavaScript里的动态类型）是很有用也是必需的。[7]
缺点
脚本语言不够全面：它们会要求一门“真正的”编程语言的存在，必须找一个数据库驱动程序将其内置进脚本语言里。 
脚本语言并不是软件工程和构建代码结构的最佳选择，例如面向对象和基于组件的开发。 
脚本语言通常不是“通用”语言，但是能够根据专门的应用来调整，例如：PHP和万维网。 [7]
应用
(1)：作为批次处理语言或工作控制语言。许多脚本语言用来执行一次性任务，尤其是系统管理方面。DOS，Windows的批处理文件和Unix的shell脚本都属于这种应用；
(2)：作为通用的编程语言存在，如Perl、Python、Ruby等。由于“解释执行，内存管理，动态”等特性，它们仍被称为脚本语言。但它们已经用于应用程序编写，用户也不把它们看作脚本语言；
(3)：许多大型的应用程序都包括根据用户需求而定制的惯用脚本语言。同样地，许多电脑游戏系统使用一种自定义脚本语言来表现NPC(Non-Player Character，Non-Playable Character，Non-Player Class)和游戏环境的预编程动作。此类语言通常是为一个单独的应用程序所设计，虽然它们貌似一些通用语言(如Quake C，Modeled After C)，但它们有自定义的功能；
(4)：网页中的嵌入式脚本语言。熟知的HTML(Hyper Text Mark-up Language)即超文本标记语言，就是一种脚本语言，它的解释器就是浏览器。JavaScript直到现在仍然是网页浏览器内的主要编程语言，它的ECMAScript标准化保证了它成为流行的通用嵌入式脚本语言。另外，随着动态网页技术发展，ASP、JSP、PHP等嵌入网页的脚本语言正被广泛使用，不过这些脚本要通过Web Server解释,而Html则被浏览器执行；
(5)：脚本语言在系统应用程序中嵌入使用，作为用户与系统的接口方式。在工业控制领域，PLC编程、组态软件的脚本语言是扩充组态系统功能的重要手段；在通信平台领域，IVR(自动语音应答)流程编程；Office办公软件，提供的宏和VBA；其他应用软件如ER Studio提供的Basic MacroEditor，用户可以编写Sax Basic脚本操作ER图，生成Access库、导出Word文档等扩展功能。[8]
一、发展情况
脚本技术得益于计算机硬件的加速发展。某些情况下甚至系统程序设计语言也不够有效，因此不得不用汇编编写应用程序。而今的机器比1980年的快100～500倍，且仍在以每18个月翻一番的速度增长。计算机性能快速提高，使计算机程序越来越复杂。因此，开发时间已远比运行时间紧迫。这时，脚本语言作为系统程序设计语言的补充，开始被主要的计算机平台所同时提供。编程语言已经由性能低下的硬件与执行效率之间的矛盾，转变为快速变化的市场需要与低效的开发工具之间的矛盾，所以脚本语言的发展在软件开发中有着必然的趋势。[1]
脚本语言的定义
脚本语言（Script languages,scripting programming languages,scripting languages）是为了缩短传统的编写-编译-链接-运行（edit-compile-link-run）过程而创建的计算机编程语言。此命名起源于一个脚本“screenplay”，每次运行都会使对话框逐字重复。早期的脚本语言经常被称为批处理语言或工作控制语言。一个脚本通常是解释运行而非编译。虽然许多脚本语言都超越了计算机简单任务自动化的领域，成熟到可以编写精巧的程序，但仍然还是被称为脚本。几乎所有计算机系统的各个层次都有一种脚本语言。包括操作系统层，如计算机游戏，网络应用程序，字处理文档，网络软件等。在许多方面，高级编程语言和脚本语言之间互相交叉，二者之间没有明确的界限。一个脚本可以使得本来要用键盘进行的相互式操作自动化。一个Shell脚本主要由原本需要在命令行输入的命令组成，或在一个文本编辑器中，用户可以使用脚本来把一些常用的操作组合成一组序列。主要用来书写这种脚本的语言叫做脚本语言。很多脚本语言实际上已经超过简单的用户命令序列的指令，还可以编写更复杂的程序。[9]
几种脚本介绍
这类的常见的有JavaScript、VBScript、Perl、PHP、Python、Ruby、Lua。
脚本语言的特点是语法简单，一般以文本形式保存，并且不需要编译成目标程序，在调用的时候直接解释。这可以当做是脚本语言的判断标准，比如说JavaScript，你只需要用记事本新建一个Html文件，在里面加上一段脚本就可以了，在浏览器打开Html文件时自然会调用JS脚本。[10]
脚本语言分类
工作控制语言和shellShell 脚本
此类脚本用于自动化工作控制，即启动和控制系统程序的行为。大多的脚本语言解释器也同时是命令行界面，如Unix shell和MS-DOS command。其他如AppleScript，可以为系统增加脚本环境，但没有命令行界面。
具体分类有：
1.4NT
2.AppleScript
3.ARexx (Amiga Rexx)
4.bash
5.csh
6.DCL
7.JCL
8.ksh
9.Cmd.exe batch (Windows, OS/2)
10.command batch (DOS)
11.REXX
12.tcsh
13.sh
14.Winbatch
15.Windows PowerShell
16.Windows Script Host
17.zshGUI 脚本GUI出现带来一种专业的控制计算机的脚本语言。它在用户和图形界面，菜单，按钮等之间互动。它经常用来自动化重复性动作，或设置一个标准状态。理论上它可以用来控制运行于基于GUI的计算机上的所有应用程序，但实际上这些语言是否被支持还要看应用程序和操作系统本身。当通过键盘进行互动时，这些语言也被称为宏语言。
具体分类有：
1.AutoHotkey
2.AutoIt
3.Expect应用程序定制的脚本语言许多大型的应用程序都包括根据用户需求而定制的惯用脚本语言。同样地，许多电脑游戏系统使用一种自定义脚本语言来表现NPC(non-player character,non-playable character,non-player class)和游戏环境的预编程动作。
此类语言通常是为一个单独的应用程序所设计，虽然它们貌似一些通用语言(如QuakeC, modeled after C)，但它们有自定义的功能。
具体分类：
1.Action Code Script
2.ActionScript
3.AutoLISP
4.BlobbieScript
5.Emacs Lisp
6.Game Maker Language
7.HyperTalk
8.IPTSCRAE
9.IRC script
10.Lingo
11.Matlab Embedded Language
12.Maya Embedded Language
13.mIRC script
14.NWscript
15.QuakeC
16.UnrealScript
17.Visual Basic for Applications
18.VBScript
19.ZZT-oopWEB编程脚本应用程序定制的脚本语言中有一种重要的类别，用于提供WEB页面的自定义功能。它专业处理互联网通信，使用网页浏览器作为用户界面。当然，大多现代WEB编程语言都比较强大可以做一些通用编程。
具体分类：
1.ColdFusion (Application Server)
2.Lasso
3.Miva
4.SMX
5.IPTSCRAE-一些网络开发团队用于创建论坛的工具文本处理语言处理基于文本的记录是脚本语言最早的用处之一。如Unix's awk最早是设计来帮助系统管理员处理调用UNIX基于文本的配置和LOG文件。Perl最早是用来产生报告的，现在它已经成了全面成熟的语言。
具体分类：
1.Awk
2.Perl
3.sed
4.XSLT通用动态语言一些语言，比如Perl，从一门脚本语言发展成了更通用的编程语言。由于“解释执行，内存管理，动态”等特性，它们仍被称为脚本语言。但它们已经用于应用程序编写，用户也不把它们看作脚本语言。
1.APL
2.Dao
3.Dylan
4.Groovy
5.Lua
6.MUMPS (M)
[11]7.newLISP
8.Nuva
9.Perl
10.PHP
11.Python
12.Ruby
13.Scheme
14.Smalltalk
15.SuperCard
16.Tcl (Tool command language)扩展/可嵌入语言少数的语言被设计通过嵌入应用程序来取代应用程序定制的脚本语言。开发者(如使用C等其它系统语言)包入使脚本语言可以控制应用程序的hook。这些语言和应用程序定制的脚本语言是同种用途，但优点在于可以在应用程序之间传递一些技能。
具体分类：
1.Ch (C/C++ interpreter)
2.Dao
3.ECMAScript 亦称 DMDScript, JavaScript, JScript
4.GameMonkeyScript
5.Guile
6.ICI
7.Lua
8.RBScript (REALbasic Script)
9.Squirrel
10.Tcl
11.Z-Script
JavaScript直到现在仍然是网页浏览器内的主要编程语言，它的ECMAScript标准化保证了它成为流行的通用嵌入性语言。
Tcl作为一种扩展性语言而创建，但更多地被用作通用性语言，就如同Python, Perl, Ruby一样。其它1.BeanShell (scripting for Java)
2.CobolScript
3.Escapade (server side scripting)
4.Euphoria
5.F-Script
6.Ferite
7.Groovy
8.Gui4Cli
9.Io
10.KiXtart
11.Mondrian
12.Object REXX
13.Pike
14.Pliant
15.REBOL
16.ScriptBasic
17.Shorthand Language
18.Simkin
19.Sleep
20.StepTalk
21.Visual DialogScript
[12]