腳本語言的源起與目的

賴榮樞

腳本語言是電腦程式語言(programming languages)的一種,故而也能讓開發者藉以編寫出讓電腦聽命行事的程式。但是「以簡單的方式快速完成某些複雜的事情」通常是創造腳本語言的重要原則,基於這項原則,使得腳本語言通常比C、C++或Java之類的「系統程式語言」(system programming languages)「簡單」、「容易」,也讓腳本語言另有一些所謂「腳本語言的特性」:

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

腳本語言源自早期文字模式的命令列電腦系統,在當時只能以鍵盤敲入命令才能操作電腦的情況下,為了減少某些需要不斷重複敲入命令的情況,電腦作業系統的命令處理器(在UNIX的世界這通常稱為command shell)提供了「批次操作」(batch operation)的方式,讓電腦操作者可以將一整個流程的命令,循序、逐行的編排在稱為「批次檔」(batch file,也稱為batch jobs或shell scripts)的文字檔,若有相同的操作需要處理,即可載入批次檔而不需再次重複敲入指令。

Shell Script

由於批次操作對命令列的電腦系統操作者幫助甚大,因此作業系統的命令處理器也不斷加強功能,尤其加入了許多程式語言的重要元素,包括變數、迴圈、條件判斷等等,讓電腦操作不只是循序的執行命令,而能更精準的操控電腦系統的運作;這種程式設計通常稱為shell programming。因此,不論是大型主機的系統操作員,或者是整個電腦環境的系統管理員、網路管理員,shell programming都是相當重要的技能,這項技能可以有效且快速的管控轄下的電腦。

UNIX系統的shell相當多樣,例如Bourne Shell(sh)、Bourne-Again Shell(bash)、Korn Shell(ksh)、C Shell(csh)等等。

* Bourne Shell(sh):這是歷史悠久且重要的UNIX shell,是由貝爾實驗室的研究員Stephen Bourne為第七版的UNIX所創造,這種shell的執行檔副檔名就是.sh。
* Bourne-Again Shell(bash):光從名稱就能猜出bash與sh是有淵源(甚至說「血緣」)。bash是由Brian Fox於1987年為GNU所創造,1990年起,Chet Ramey成為主要的維護者。bash是相當流行的shell,除了是大多數Linux預設的shell,在許多UNIX-like系統也有其蹤跡(例如 Mac OS X Tiger),甚至也能透過Cygwin在Windows系統執行。
* Korn Shell(ksh):是由貝爾實驗室的研究員David Korn在80年代初期所創造,ksh除了與sh完全相容,也包含了若干C Shell的功能。
* C Shell(csh):是由Bill Joy(後來創辦了昇陽公司)為BSD UNIX系統所創造。csh源自於第六版UNIX的Thompson shell(是Bourne Shell的前身),因為語法類似C語言而得名。

除了上述盛行於UNIX環境的shell,其他作業系統也有專屬的shell或shell腳本語言,例如蘋果麥金塔系統的AppleScript、IBM OS/2的REXX(REstructured eXtended eXecutor)。而DOS以及早期Windows的shell則是Command.com,但也因功能較弱,因此有4DOS、4NT等軟體可增強功能,Windows 2000以及之後的Windows則改以功能較強cmd.exe作為Windows shell,並且內建了兩種腳本語言,大幅提高了Windows shell的可用性。而微軟也將會推出功能更強的Windows shell,稱為Windows PowerShell。

雖然現在許多電腦系統都提供了圖形化的操作方式,但是卻都沒有因而停止提供文字模式的命令列操作方式,相反的,許多系統反而更加強這部份的功能,例如Windows就不只加強了操作命令的功能和數量,也一直在改善shell programming的方式。而之所以要加強、改善,當然是因為不夠好;Windows的圖形化操作方式對單一用戶端電腦的操作,已經相當方便,但如果是一群用戶端電腦,或者是24小時運作的伺服器電腦,圖形化操作方式有時會力有未逮。

巨集語言

巨集語言也可視為腳本語言的分支,兩者也實質上的相同之處。巨集語言通常附屬於某一種軟體,例如微軟Office、Visual Studio、Adobe Photoshop都內建了巨集語言的功能,使用者可利用軟體所附的巨集語言,達到自動化的結果(例如調整某個資料夾所有PSD圖檔的解析度)。而這類巨集語言也大多提供錄製巨集的功能,自動記錄使用者的鍵盤按鍵,讓使用者不必寫程式,就能產生巨集程式。此外,C語言和組合語言也有巨集功能,是以搜尋及取代進行編譯或組譯之前的前置處理。

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License