腳本語言

腳本語言（scripting language）是為了縮短傳統的「編寫、編譯、連結、運行」（edit-compile-link-run）過程而創建的電腦程式語言。早期的腳本語言經常被稱為批處理語言或作業控制語言。一個腳本通常是解釋運行而非編譯。腳本語言通常都有簡單、易學、易用的特性，目的就是希望能讓程式設計師快速完成程式的編寫工作。而巨集語言則可視為腳本語言的分支，兩者也有實質上的相同之處。

雖然許多腳本語言都超越了電腦簡單任務自動化的領域，比如JavaScript、Perl、PHP、Python、Ruby和Tcl，成熟到可以編寫精巧的程序，但仍然還是被稱為腳本。幾乎所有電腦系統的各個層次都有一種腳本語言。包括作業系統層，如電腦遊戲，網路應用程式，字處理文檔，網路軟體等。在許多方面，高級程式語言和腳本語言之間互相交叉，二者之間沒有明確的界限。

## 起源

腳本語言是一種電腦程式語言，因此也能讓開發者藉以編寫出讓電腦聽命行事的程式。以簡單的方式快速完成某些複雜的事情通常是創造腳本語言的重要原則，基於這項原則，使得腳本語言通常比C語言、C++語言或 Java之類的系統程式語言要簡單容易，也讓腳本語言另有一些屬於腳本語言的特性：

- 語法和結構通常比較簡單
- 學習和使用通常比較簡單
- 通常以容易修改程式的「直譯」作為執行方式，而不需要「編譯」
- 程式的開發產能優於執行效能

一個腳本可以使得本來要用鍵盤進行的相互式操作自動化。一個Shell腳本主要由原本需要在命令行輸入的命令組成，或在一個文本編輯器中，使用者可以使用腳本來把一些常用的操作組合成一組序列。主要用來書寫這種腳本的語言叫做腳本語言。很多腳本語言實際上已經超過簡單的使用者命令序列的指令，還可以編寫更複雜的程序。

## 定義

電腦語言是為了各種目的和任務而開發的，一個常見任務就是把各種不同的已有組件連接起來以完成相關任務。大多腳本語言共性是：良好的快速開發，有效率的執行，解釋而非編譯執行，和其它語言編寫的程序組件之間通信功能很強大。

許多腳本語言用來執行一次性任務，尤其是系統管理方面。它可以把服務組件粘合起來，因此被廣泛用於GUI創建或者命令行，作業系統通常提供一些默認的腳本語言，即通常所謂shell腳本語言。

腳本通常以文本（如ASCII）保存，只在被調用時進行解釋或編譯。

測試大型項目中經常把腳本和其它低級程式語言一起使用，各自發揮優勢解決特定問題。腳本經常用於設計互動通信，它有許多可以單獨執行的命令，可以做很高級的操作，（如在傳統的Unix shell（sh）中，大多操作就是程序本身。）

這些高級命令簡化了代碼編寫過程。諸如記憶體自動管理和溢出檢查等性能問題可以不用考慮。在更低級或非腳本語言中，記憶體及變量管理和數據結構等耗費人工，為解決一個給定問題需要大量代碼，當然這樣能夠獲得更為細緻的控制和優化。腳本缺少優化程序以提速或者降低記憶體的伸縮性。

綜上所述，腳本編程速度更快，且腳本文件明顯小於如同類C程序文件。這種靈活性是以執行效率為代價的。腳本通常是解釋執行的，速度可能很慢，且運行時更耗記憶體。在很多案例中，如編寫一些數十行的小腳本，它所帶來的編寫優勢就遠遠超過了運行時的劣勢，尤其是在當前程式設計師工資趨高和硬體成本趨低時。

然而，在腳本和傳統程式語言之間的界限越來越模糊，尤其是在一系列新語言及其集成常出現時。在一些腳本語言中，有經驗的程式設計師可以進行大量優化工作。在大多現代系統中通常有多種合適的腳本語言可以選擇，所以推薦使用多種語言（包括C或者彙編語言）編寫一種腳本。

## 腳本語言分類

### 作業控制和外殼語言

此類腳本用於自動化工作控制，即啟動和控制系統程序的行為。大多的腳本語言解釋器也同時是命令行界面，如Unix shell和MS-DOS COMMAND.COM。其他如AppleScript，可以為系統增加腳本環境，但沒有命令行界面。

具體包括：

- 4DOS
- 4NT / Take Command
- AppleScript
- ARexx（Amiga Rexx）
- bash
- csh
- DCL
- JCL
- ksh
- Cmd.exe批處理（Windows, OS/2）
- Command.com批處理（DOS）
- REXX
- tcsh
- sh
- Winbatch
- Windows PowerShell
- Windows Script Host
- zsh

### 文本處理語言

處理基於文本的記錄是腳本語言最早的用處之一。如Unix's awk最早是設計來幫助系統管理員處理調用UNIX基於文本的配置和LOG文件。Perl最早是用來產生報告的，現在它已經成了全面成熟的語言。

具體包括：

- Awk
- Perl
- sed
- XSLT

### 動態語言

一些通用動態語言，比如Perl，從一門腳本語言發展成了更通用的程式語言，由於「解釋執行，記憶體管理，動態」等特性，它們仍被歸類為腳本語言。腳本編程常與系統編程相對比，如John Ousterhout在Ousterhout二分法或大型編程和小型編程中做出的那樣。在這種視角下，腳本是膠水代碼，被來連接軟體組件，專門用於這個目的的語言叫做膠水語言。

- APL
- Dylan
- Groovy
- JavaScript/JScript
- Lua
- MUMPS（M）
- newLISP
- Nuva
- Perl
- PHP
- Python
- Ruby
- Scheme
- Shell腳本（如 Unix shell、Windows PowerShell等）
- GNU Smalltalk
- SuperCard
- Tcl（工具命令語言）
- VBScript

### 可擴展/可嵌入語言

少數的語言被設計通過嵌入應用程式來取代應用程式定製的腳本語言。開發者（如使用C等其它系統語言）包入使腳本語言可以控制應用程式的hook。這些語言和應用程式定製的腳本語言是同種用途，但優點在於可以在應用程式之間傳遞一些技能。

具體包括：

- Ch (程序)（C/C++解釋器）
- ECMAScript（實現為DMDScript、JavaScript等）
- GameMonkeyScript
- Guile
- Lua
- RBScript（REALbasic腳本）
- Squirrel
- Tcl

JavaScript直到現在仍然是網頁瀏覽器內的主要程式語言，它的ECMAScript標準化保證了它成為流行的通用嵌入性語言。

Tcl作為一種可擴展語言而創建，但更多地被用作通用性語言，就如同Python, Perl, Ruby一樣。

### 應用程式定製的腳本語言

許多大型的應用程式都包括根據使用者需求而定製的慣用腳本語言。同樣地，許多電腦遊戲系統使用一種自定義腳本語言來表現NPC（non-player character,non-playable character,non-player class）和遊戲環境的預編程動作。

此類語言通常是為一個單獨的應用程式所設計，雖然它們貌似一些通用語言（如QuakeC, modeled after C），但它們有自定義的功能。

具體包括：

- Action Code Script
- ActionScript
- AutoLISP
- Emacs Lisp
- Game Maker Language
- HyperTalk
- IPTSCRAE
- IRC script
- Lingo
- Matlab Embedded Language
- Maya Embedded Language
- mIRC script
- NWscript
- QuakeC
- UnrealScript
- Visual Basic for Applications
- VBScript
- ZZT-oop

### WEB編程腳本

應用程式定製的腳本語言中有一種重要的類別，用於提供WEB頁面的自定義功能。它專業處理網際網路通信，使用網頁瀏覽器作為使用者界面。當然，大多現代WEB程式語言都比較強大可以做一些通用編程。

具體包括：

- ColdFusion（應用伺服器）
- Lasso
- Miva
- SMX
- IPTSCRAE，一些網路開發團隊用於創建論壇的工具

### GUI腳本

GUI出現帶來一種專業的控制電腦的腳本語言。它在使用者和圖形界面，菜單，按鈕等之間互動。它經常用來自動化重複性動作，或設置一個標準狀態。理論上它可以用來控制運行於基於GUI的電腦上的所有應用程式，但實際上這些語言是否被支持還要看應用程式和作業系統本身。當通過鍵盤進行互動時，這些語言也被稱為巨集語言。

具體包括：

- AutoHotkey
- AutoIt
- Expect

### 其它

- BeanShell（Java的腳本）
- CobolScript
- Euphoria
- F-Script
- Groovy
- Io
- KiXtart
- Object REXX
- Pike
- REBOL
- ScriptBasic
- StepTalk
- Visual DialogScript

## 外部連結

- A study of the Script-Oriented Programming (SOP) suitability of selected languages – from The Scriptometer.
- Hotscripts.com -A collection of many scripts written in an assortment of languages
- OpenSourceScripts.com -A collection of open source scripts
- A Slightly Skeptical View on Scripting Languages by Dr. Nikolai Bezroukov
- Scripting: Higher Level Programming for the 21st Century by John K. Ousterhout
- Are Scripting Languages Any Good? A Validation of Perl, Python, Rexx, and Tcl against C, C++, and Java (PDF) —2003 study
- Free Classified ASP Script Site Software
- 學習Shell Scripts 鳥哥的Linux私房菜