{{위키데이터 속성 추적}}
'''스크립트 언어'''({{lang|en|scripting language}})란 응용 소프트웨어를 제어하는 컴퓨터 프로그래밍 언어를 가리킨다. '''스크립트 프로그래밍 언어'''라고도 한다. 스크립트 언어는 응용 프로그램과 독립하여 사용되고 일반적으로 응용 프로그램의 언어와 다른 언어로 사용되어 최종사용자가 응용 프로그램의 동작을 사용자의 요구에 맞게 수행할 수 있도록 해준다. 스크립트({{lang|en|scripts}})는 연극 용어인 스크립트에서 유래되었으며 초창기 스크립트 언어는 배치언어({{lang|en|batch languages}}) 또는 작업 제어 언어({{lang|en|job control language}})라고도 불리었다.

== 특징 ==
일반적으로 스크립트 언어는 매우 빠르게 작성된 코드를 실행하기 위해 고안되었으며, 짧은 소스 코드 파일이나 [[REPL]](Read–eval–print-loop)로 상호작용하는데 적합하도록 설계되었다.<ref>{{서적 인용
|title=The Computing Universe: A Journey through a Revolution
|first1=Tony
|last1=Hey
|first2=Gyuri
|last2=Pápay
|publisher=Cambridge University Press
|year=2014
|isbn=978-1-31612322-5
|page=[https://books.google.com/books?id=q4FIBQAAQBAJ&pg=PA76 76]
|postscript=, "A major characteristic of modern scripting languages is their interactivity, sometimes referred to as a ''REPL'' programming environment. […] The characteristics of ease of use and immediate execution with a REPL environment are sometimes taken as the definition of a scripting language."}}</ref> 일반적으로 상대적으로 단순한 [[구문 (프로그래밍 언어)|구문]]과 [[의미론 (컴퓨터 과학)|의미]]를 내포한다. 즉, 보통 "스크립트"(스크립트 언어로 작성된 코드)는 시작에서 끝날 때까지 실행되며, 명확한 [[엔트리 포인트]]가 없다.

이를테면, [[자바 (프로그래밍 언어)|자바]]를 스크립트 언어로 규정하는 것은 일반적이지 않은데, 이는 어느 클래스들이 어느 파일에 존재하는지에 대한 길이가 긴 문법과 규칙 때문이며, 자바를 상호작용적으로 직접 실행하는 것도 불가능한데 그 까닭은 소스 파일들이 오직 호스트 애플리케이션이나 애플리케이션 런처를 사용하여 외부에서 호출되어야 하기 때문이다.<syntaxhighlight lang="java">
public class HelloWorld {
  public void printHelloWorld() {
    System.out.println("Hello World");
  }
}
</syntaxhighlight>
"Hello World"를 출력하도록 고안된 위의 코드는 main()이 HelloWorld 클래스에 선언되어 있지 않기 때문에 아무것도 하지 않는다.

== 위험성 ==
스크립트 언어를 사용하면 안 될 때가 있다. 이러한 부분에서는 [[컴파일 언어]] 등으로 대체한다. (출처: 김태용의 [[리눅스]] 쉘 프로그래밍)<!-- 출처 : 김태용의 리눅스 쉘 프로그래밍 -->

# 리소스에 민감한 작업들, 특히 속도가 중요한 요소일 때(정렬, 해쉬 등)
# 강력한 산술 연산 작업들, 특히 임의의 정밀도 연산
# 플랫폼 간 이식성이 필요할 때
# 구조적 프로그래밍이 필요한 복잡한 애플리케이션(변수의 타입 체크나 함수 프로토 타입 등이 필요할 때)
# 업무에 아주 중요하거나 회사의 미래가 걸렸다는 확신이 드는 애플리케이션
# 보안 상 중요해서 시스템 무결성을 보장하기 위해 외부의 침입이나 크래킹, 파괴 등을 막아야 할 필요가 있을 때
# 서로 의존적인 관계에 있는 여러 컴포넌트로 이루어진 프로젝트
# 과도한 파일 연산이 필요할 때
# 다차원 배열이 필요할 때
# 링크드 리스트나 트리 같은 데이터 구조가 필요할 때
# 그래픽이나 GUI를 만들고 변경하는 등의 작업이 필요할 때
# 시스템 하드웨어에 직접 접근해야 할 때
# 포트나 소켓 I/O가 필요할 때
# 예전에 쓰던 코드를 사용하는 라이브러리나 인터페이스를 써야 할 필요가 있을 때
# 독점적이고 소스공개를 안 하는 애플리케이션을 만들어야 할 때(오픈소스 스크립트 언어의 경우)

== 역사 ==
1950년대에 초기의 [[메인프레임 컴퓨터]]는 상호작용적이지 않았으며 [[일괄 처리]]를 대신 사용하였다. IBM의 [[작업 제어 언어]](JCL)은 일괄 처리를 제어하기 위해 사용된 언어의 원형이다.<ref>{{서적 인용|last=IBM Corporation|title=IBM System/360 Operating System Job Control Language (C28-6529-4)|year=1967|url=http://www.bitsavers.org/pdf/ibm/360/os/R01-08/C28-6539-4_OS_JCL_Mar67.pdf}}</ref>

최초의 인터랙티브 셸({{lang|en|interacive shell}})은 시분할 시스템의 동작을 원격 제어하기 위해 1960년에 개발되었다.

== 종류 ==
=== 글루 언어 ===
{{columns
|col1=
* [[애플스크립트]]
* [[콜드퓨전]]
* [[DIGITAL Command Language|DCL]]
* [[Embeddable Common Lisp]]
* [[ECL 프로그래밍 언어|ecl]]
* [[얼랑]]
* [[작업 제어 언어|JCL]]
* [[커피스크립트]]
* [[JScript]], [[자바스크립트]]
* [[루아]]
|col2=
* [[m4]]
* [[펄]]
* [[PHP]]
* [[퓨어]]
* [[파이썬]]
* [[Rebol]]
* [[레드 (프로그래밍 언어)|레드]]
* [[Rexx]]
* [[루비 (프로그래밍 언어)|루비]]
|col3=
* [[스킴 (프로그래밍 언어)|스킴]]
* [[Tcl]]
* [[유닉스]] [[셸 스크립트]] ([[콘 셸|ksh]], [[C 셸|csh]], [[bash]], [[본 셸|sh]] 등)
* [[VBScript]]
* [[워크 플로 언어]]
* [[윈도우 파워셸]]
* [[XSLT]]
}}

=== 작업 제어 언어와 셸 ===
{{본문|셸 스크립트}}

== 같이 보기 ==
{{위키공용분류}}
* [[배치 파일]]

== 각주 ==
{{각주}}

{{프로그래밍 언어의 유형}}
{{전거 통제}}
{{토막글|프로그래밍 언어}}

[[분류:스크립트 언어| ]]
[[분류:프로그래밍 패러다임]]