As linguagens de script podem parecer um pouco estranhas para os programadores de linguagens mais tradicionais, como programadores C ou C++. A exemplo eu cito falta de tipos distintos para as variáveis o que contrasta com a tipagem forte do C ou do Java. Ou mesmo o fato de estas linguagens usarem algum mecanismo obscuro para gerenciamento dinâmico de memória que consome mais recursos da máquina do que os estritamente necessários. Por outro lado se pensarmos que em linguagens como C e C++ cerca de 40% do tempo de desenvolvimento é gasto com técnicas de armazenamento e gerenciamento de memória (Hans Boehm. Advantages and Disadvantages of Conservative Garbage Collection. ) essas linguagens podem ser utilizadas em projetos cujo desempenho possa ser “rápido o bastante” e não “o mais rápido possível” ou mesmo em sistemas de prova de conceito.

O termo script, que provém de mecanismos antigos onde usavam-se arquivos de texto (estes sim scripts) para gerar entradas de programas iterativos, não mais faz sentido. Perceba, as linguagens de script modernas como Perl5, TCL e Python cresceram em capacidade e poder que o termo “linguagem de script” não passa de mera palavra técnica que não mais expressa a atual capacidade destas linguagens sendo usado ainda por que não temos um termo melhor para elas. Hoje elas possuem estruturas de dados complexas, como referências, hashs ou dicionários e aceitam até mesmo as modernas técnicas de programação orientada a objetos além de frameworks complexos.

E para sermos programadores ou administradores de sistemas proficientes nos ambientes Linux o conhecimento de ao menos uma ou duas linguagens de Scripts e conhecimentos mínimos de C ou C++ fazem-se necessários. Dentre as linguagens de script, minha preferida é o Perl5, porém hoje vamos falar do Shell.

O Shell foi uma das, se não a primeira, interface de desenvolvimento de scripts no mundo Unix. Mas com certeza foi a primeira interface capaz de produzir código interpretado portável (Addison Wesley - The Art of Unix Programming). Apesar de ser muito utilizada como mera interface de comando, o Shell é uma linguagem de programação simples e natural. Por não possuir estruturas de dados complexas o Shell utiliza de forma muito inteligente outros programas em modo texto (como sort, sed, awk e perl -e), suprindo assim esta fraqueza.

A primeira versão do netnews era um shellscript com 150 linhas apenas. De acordo com Steven M. Bellovin, idealizador do programa, a versão em shellscript era muito lento para produção, mas muito eficiente para provas de conceito e testes.

O primeiro Shell disponível para Unix foi o Bourne Shell (sh), hoje substituído em muitos sistemas pelo Bourne Again Shell (bash). Depois do Bourne Shell muitos outros shells foram desenvolvidos, como o Korn Shell (ksh) e o C Shell (csh) entre outros.

Scripts em Shell são excelentes em sistemas onde não podemos assumir a pré existência de outras linguagens, como Python ou Perl ou mesmo para scripts que rodam durante o start-up do sistemas operacional para levantar os serviços necessários e fazer as configurações dos usuários. Também são uma ótima pedida em situações simples para administradores, instaladores e como ferramenta didática para programadores iniciantes. Sistemas Shell mais complexos podem arriscar sua portabilidade, pois existem diferenças de implementação entre os Shells existentes (Bash, Korn, C) além da possibilidade da não existência de um determinado comando no sistema que executará sua aplicação.