240px|thumb|Exemplo de código em Python. Linguagem de script ou scripting é uma linguagem de programação que suporta scripts, programas escritos para um sistema de tempo de execução especial que automatiza a execução de tarefas que seriam executadas, uma de cada vez, por um operador humano. Linguagens de script são frequentemente interpretadas (ao invés de compiladas). Primitivas são frequentemente as tarefas elementares ou chamadas de API, e a linguagem permite a elas serem combinadas dentro de programas complexos. Os ambientes que podem ser automatizados através de scripting incluem aplicações de software, páginas web dentro de um navegador web, os shells de sistemas operacionais (OS), sistemas embarcados, bem como numerosos games. Uma linguagem de script pode ser vista como uma linguagem de domínio específico para um ambiente particular (no caso do scripting, uma aplicação também conhecida como uma "linguagem de extensão").

Linguagens de script são algumas vezes referidas como linguagens de programação de altíssimo nível, pois operam com um altíssimo nível de abstração, ou como linguagens de controle, particularmente para linguagens de controle de emprego em mainframes.

A expressão "linguagem de script" é também eventualmente empregada para se referir a linguagens de propósitos diversos de alto nível dinâmicas, tais como Perl, Tcl, e Python, Larry Wall, December 6, 2007 sendo o termo "script" frequentemente aplicado a pequenos programas (pouco mais de alguns milhares de linhas de código) em tais linguagens, ou em linguagens de domínio específico tais como as linguagens de processamento de texto sed e AWK. Algumas destas linguagens foram originalmente desenvolvidas para uso dentro de um ambiente particular e, posteriormente, desenvolvidas em linguagens de propósitos diversos ou de domínio específico portáteis. Inversamente, muitas linguagens de propósitos diversos têm dialetos que podem ser usados como linguagens de script. Este artigo examina as linguagens de script no sentido estrito de linguagens para um ambiente específico.

O espectrum das linguagens de script varia de muito pequenas a altíssimas linguagens de domínio específico a linguagens de propósitos diversos usadas para scripting. Exemplos de norma de linguagens de script para ambientes específicos incluem: Bash, para o Unix ou sistemas operacionais tipo Unix; ECMAScript (JavaScript), para navegadores web; e Visual Basic for Applications, para aplicações Microsoft Office. Lua é uma linguagem projetada e amplamente usada como uma linguagem de extensão. Python é uma linguagem de propósitos diversos que é comumente usada como uma linguagem de extensão, enquanto ECMAScript é ainda primariamente uma linguagem de script para navegadores web, mas é também usada como uma linguagem de propósitos diversos. O dialeto Emacs Lisp do Lisp (para o editor Emacs) e o dialeto Visual Basic for Applications do Visual Basic são exemplos de dialetos de linguagens de script para linguagens de propósitos diversos. Alguns sistemas de jogos de computador, particularmente o mundo virtual Second Life e a franquia Trainz de simuladores de ferrovias, são consideravalmente estendidos em funcionalidade pelas extensões script. Em outros games, como The Battle for Wesnoth, são scripts escritos por outros usuários.

Características Geralmente, as linguagens de script são muito rápidas para aprender e escrever, seja como arquivos de código-fonte pequenos ou interativamente, em um read–eval–print loop (REPL, linguagem shell). Isso geralmente implica sintaxe e semântica relativamente simples; em geral, um script (código escrito na linguagem de script) é executado do início para o fim, com nenhum ponto de entrada explícito.

É incomum caracterizar o Java, por exemplo, como uma linguagem de script por causa de sua sintaxe tediosa e regras sobre quais classes existem em quais arquivos, e não é diretamente possível executar o Java interativamente, porque os arquivos-fonte podem apenas conter definições que devem ser invocadas externamente por uma aplicação host ou aplicação launcher.

public class HelloWorld { public void printHelloWorld() { System.out.println("Hello World");

Este pedaço de código entendido imprimir "Hello World" não faz nada, pois o main() não é declarado na classe HelloWorld.

Em contraste, Python permite definição de algumas funções em um arquivo simples, ou evitar funções completamente e usar estilo de programação imperativa, ou ainda usar ela interativamente.

print ("Hello World")

Esta linha de código Python imprime "Hello World"; nenhuma afirmação declarativa como main() é requisitada aqui.

Uma linguagem de script é frequentemente interpretada do código-fonte ou bytecode. Em contraste, no ambiente de software, os scripts são escritos numa forma de linguagem compilada e distribuída no código de máquina específico.

Linguagens de script devem ser projetadas para uso por usuários finais de um programa—desenvolvimento de usuário final—ou devem ser apenas para uso interno por desenvolvedores, dessa forma eles podem escrever porções do programa na linguagem de script. Linguagens de script geralmente usam abstração, uma forma de ocultação de informação, para poupar os usuários dos detalhes dos tipos de variáveis internas, armazenamento de dados e gerenciamento de memória.

Scripts são frequentemente criados ou modificados pela pessoa que os executa, mas eles são também frequentemente distribuídos, tais como quando porções largas de games são escritas em linguagem de script.

História Os primeiros computadores mainframes (na década de 1950) não eram interativos (não usavam processamento em batch). A Job Control Language (JCL), da IBM, é o arquétipo das linguagens usadas para controlar o processamento em batch.

Os primeiros shells interativos foram desenvolvidos na década de 1960 para possibilitar a operação remota dos primeiros sistemas de tempo compartilhado, e estes usavam shell scripts, que controlavam os programas de computador rodando dentro de um programa de computador, o shell. A Calvin Mooers, em sua linguagem TRAC, é geralmente atribuída a invenção da substituição de comandos - capacidade de incorporar comandos em scripts que, quando interpretados, inseriam um caractere string. Multics chama isso de funções ativas.

Louis Pouzin escreveu um primeiro processador para comandos scripts, chamado RUNCOM para CTSS, por volta de 1964. Stuart Madnick, no MIT, escreveu uma linguagem script para o CP/CMS da IBM, em 1966. Ele originalmente chamou este processador de COMMAND (mais tarde renomeado EXEC). Multics incluiu um ramo do CTSS RUNCOM, também chamado de RUNCOM. EXEC foi afinal substituído pelo EXEC 2 e REXX.

Linguagens como Tcl e Lua foram especificamente projetadas como linguagens de script para propósitos diversos que poderiam ser incorporadas em alguma aplicação. Outras linguagens como Visual Basic for Applications (VBA) forneceram integração forte com as facilidades de automação de um sistema subjacente. Incorporando tais linguagens de script de propósitos diversos em vez de desenvolver uma nova linguagem para cada aplicação tinha também benefícios óbvios, aliviando o desenvolvedor da aplicação de precisar codificar um tradutor da linguagem do rabisco e permitir ao usuário aplicar habilidades aprendidas em outro lugar.

Alguns softwares incorporam diversas linguagens de script. Os navegadores web modernos quase sempre fornecem uma linguagem para extensões escritas para o próprio navegador, e diversas linguagens padrão incorporadas para controlar o navegador, incluindo JavaScript (um dialeto do ECMAScript) ou XUL.

Tipos de linguagens de script Linguagens aglutinativas (glue languages) Scripting é frequentemente contrastado com programação de sistemas, como na dicotomia de Ousterhout ou "programação no grande e programação no pequeno".

Nesta visão, scripting é particularmente glue code, conectando componentes de software a uma linguagem especializada para este propósito. É uma linguagem aglutinativa. Pipelines e shell scripting são exemplos arquetípicos de linguagens aglutinativas, e Perl foi inicialmente desenvolvida para completar esta mesma função. O desenvolvimento web pode ser considerado um uso de linguagens aglutinativas, intermediando um banco de dados e um servidor web. Mas se uma quantidade substancial de lógica é escrita em script, ela é mais bem caracterizada simplesmente como outro componente de software, não aglutinativo.

Linguagens aglutinativas são especialmente úteis para escrever e manter: comandos customizados para um comando shell; pequenos programas que são mais bem implementados em uma linguagem compilada; programas wrapper (empacotadores) para executáveis, como um arquivo batch que move ou manipula arquivos e faz outras coisas com o sistema operacional, antes ou após rodar uma aplicação como um processador de texto, uma planilha eletrônica, um banco de dados, um assembler, um compilador etc.; scripts que devem mudar; protótipos rápidos de uma solução eventualmente implementada em outra linguagem, frequentemente compilada.

Exemplos de linguagens aglutinativas:

Linguagens macro expostas ao sistema operacional ou componentes de aplicação podem servir como linguagens aglutinativas. Estas incluem Visual Basic for Applications, WordBasic, LotusScript, CorelScript, Hummingbird Basic, QuickScript, SaxBasic, e WinWrap Basic. Outras ferramentas como AWK podem também ser consideradas como linguagens aglutinativas como pode alguma linguagem implementada por um motor Windows Script Host (VBScript, JScript e VBA por padrão no Windows e motores de terceiros incluindo implementações de Rexx, Perl, Tcl, Python, XSLT, Ruby, Delphi, &c). Uma maioria de aplicações podem acessar e usar componentes do sistema operacional via modelos de objetos ou suas próprias funções.

Outros dispostivos como calculadoras programáveis também devem possuir linguagens aglutinativas; os sistemas operacionais de PDAs, tais como Windows CE devem possuir ferramentas macro nativas disponíveis ou de terceiros junto com aplicações aglutinativas, em adição à implementações de linguagens aglutinativas comuns—incluindo Windows NT, MS-DOS e alguns shells Unix, Rexx, PHP, e Perl. Dependendo da versão do SO, WSH e motores de script padrão (VBScript e JScript) são disponíveis.

Calculadoras programáveis podem ser programadas com linguagens aglutinativas de três formas. Por exemplo, a Texas Instruments TI-92, por padrão de fábrica pode ser programada com uma linguagem de script de comando. A inclusão de scripting e a linguagem aglutinativa Lua nas séries TI-NSpire de calculadoras poderia ser visto como um sucessor disso. As linguagens de programação de alto nível primárias de muitas calculadoras gráficas (muito frequentes variantes de Basic, algumas vez derivações de Lisp, e mais raramente, derivações de C) em muitos casos podem aglutinar junto com as funções da calculadora—tais como gráficos, listas, matrizes etc. Implementações de terceiros de versão mais compreensiva de Basic que deve ser mais próxima a variantes listadas como linguagens aglutinativas neste artigo são disponíveis—e tentam implementar Perl, Rexx, ou vários shells de sistema operacional nas calculadoras gráficas TI e HP são também mencionadas. compiladores cruzados de computador pessoal baseados em C para algumas máquinas de TI e HP usaram em conjunção com ferramentas que convertem entre C e Perl, Rexx, AWK, bem como shell scripts para Perl, VBScript para e do Perl tornam isso possível para escrever um programa em uma linguagem aglutinativa para uma implementação eventual (como um programa compilado) na calculadora.

Job control languages e shells