O que é o Bourne Shell?
O shell Bourne é um pequeno programa que roda nos sistemas operacionais Unix® e LINUX® e fornece uma interface para executar programas no sistema. É freqüentemente chamada de interface de linha de comando ou intérprete de comando, pois não fornece interface gráfica do usuário (GUI) para o usuário. Os comandos e quaisquer parâmetros necessários a serem executados são digitados no shell. O shell Bourne também é uma linguagem de script, permitindo que os usuários criem e executem arquivos de script que podem processar dados através de vários programas por meio de um único comando. Em sistemas tipo Unix®, o programa é simplesmente conhecido como "sh".
Os primeiros shells para sistemas Unix® foram conhecidos como shell Thompson, criado por Ken Thompson, um dos criadores originais do sistema operacional Unix®. O shell Thompson estava limitado à interpretação de comandos, e várias funções adicionais precisavam ser executadas como operações externas. Mais tarde, Stephen Bourne criou o shell Bourne para substituir o Thompson, adicionando vários novos recursos ao próprio shell, bem como a linguagem de script do shell.
Na realidade, o shell Bourne foi planejado como uma linguagem de script desde o início. Embora ainda fosse a interface da linha de comandos para o Unix versão sete, também abriu a possibilidade de os usuários desenvolverem scripts de shell que vinculariam comandos para processar dados. Através do uso dessa programação, o usuário pode estabelecer variáveis para capturar dados conhecidos ou desconhecidos da entrada ou saída e manipular o processamento desses dados através do uso de instruções condicionais no script por meio de uma técnica denominada fluxo de controle.
Este também foi o primeiro shell a implementar um recurso conhecido como manipulação de sinal. Por meio do shell Bourne, um usuário pode enviar um tipo específico de sinal para um processo já em execução no computador, instruindo esse processo a fazer outra coisa. Muitas dessas são maneiras de parar um processo que está sendo executado e produzir algum tipo de saída que pode ser usada para depuração, embora existam outras para interromper temporariamente um processo, retomar e assim por diante.
A capacidade de controlar diretamente os descritores de arquivos foi outra novidade para o shell Bourne. Em um sistema semelhante ao Unix®, todo programa em execução possui uma tabela que lista os descritores de arquivos para todos os arquivos abertos. Isso pode incluir qualquer coisa, de um arquivo de texto simples a um diretório ou até os soquetes de comunicação que os processos usam para compartilhar dados entre si. Para um usuário ter controle sobre os descritores de arquivo em um sistema, é permitido um controle sem precedentes sobre entrada e saída de praticamente tudo no computador.
É claro que, embora o shell Bourne oferecesse tal funcionalidade adicional aos usuários, faltava recursos como a capacidade de controlar processos interativamente, estabelecer aliases de comando e manter um histórico. Mais tarde, no entanto, começaram a surgir vários descendentes que pegaram os recursos de casca mais úteis que foram criados ao longo dos anos e os transformaram em novas conchas. Um exemplo comum é o shell Bourne-again, ou Bash, que é comum em muitos sistemas LINUX®. Como resultado, muitos desses descendentes são totalmente capazes de executar scripts regulares do shell Bourne, dando a todo sistema Unix® alguma implementação do shell Bourne original de uma maneira ou de outra. Em muitos sistemas LINUX®, este é simplesmente um link de "sh" para "bash" ou algum outro descendente capaz.