O shell é um interpretador de comandos que serve como interface entre o usuário e o sistema operacional. No Linux e outros sistemas Unix-like, o shell é uma ferramenta essencial para automação, administração e desenvolvimento. O Bash (Bourne Again SHell) é o shell padrão na maioria das distribuições Linux, mas sua história remonta aos primórdios do Unix.

Nesta aula, vamos explorar a evolução do shell, desde os primeiros interpretadores criados nos laboratórios da Bell até o Bash moderno, passando pelas contribuições de figuras-chave e pela competição entre diferentes shells. Compreender essa história ajuda a entender por que o Bash é como é e como ele se encaixa no ecossistema atual.

Introdução

O shell é um programa que recebe comandos digitados pelo usuário e os executa, geralmente chamando outros programas. Ele também oferece recursos como variáveis, estruturas de controle (if, for, while) e funções, permitindo criar scripts complexos. O termo "shell" vem da ideia de ser uma casca que envolve o kernel do sistema operacional.

O primeiro shell Unix foi o Thompson shell (sh), escrito por Ken Thompson em 1971. Ele era simples e não possuía scripts. Em 1977, Stephen Bourne criou o Bourne shell (também sh), que introduziu variáveis, controle de fluxo e scripts. Esse shell tornou-se o padrão no Unix System V. Mais tarde, surgiram outros shells como C shell (csh), Korn shell (ksh) e, finalmente, o Bash.

Pessoas e cronologia (Bourne shell, Brian Fox, GNU)

O Bourne shell, desenvolvido por Stephen Bourne nos Bell Labs, foi um marco por sua sintaxe limpa e recursos de programação. Ele era o shell padrão do Unix Versão 7 e influenciou todos os shells posteriores. Seu nome é uma homenagem ao seu criador.

Com o surgimento do projeto GNU em 1983, Richard Stallman e a Free Software Foundation precisavam de um shell livre para substituir o Bourne shell proprietário. Brian Fox, um programador da FSF, começou a desenvolver o Bash em 1987. O Bash foi lançado em 1989 como parte do sistema GNU, e rapidamente se tornou o shell mais popular em sistemas Linux.

Desde então, o Bash foi mantido por várias pessoas, incluindo Chet Ramey, que assumiu a manutenção em 1992 e continua até hoje. O Bash incorporou recursos do Bourne shell, do Korn shell e do C shell, tornando-se um shell poderoso e compatível com POSIX.

sh vs bash vs outros shells

O comando sh geralmente aponta para o shell Bourne ou um shell compatível. No Linux, /bin/sh é frequentemente um link simbólico para /bin/bash ou /bin/dash (Debian Almquist shell). No entanto, o Bash possui muitos recursos que não estão no POSIX sh, como arrays, expansão de chaves e [[ ]] para testes.

Outros shells populares incluem:

  • Zsh: Shell poderoso com temas e plugins, usado como padrão no macOS desde Catalina.
  • Fish: Shell amigável com autocomplete inteligente e sintaxe simplificada.
  • Ksh: Korn shell, muito usado em ambientes Unix comerciais.
  • Dash: Shell leve e rápido, focado em conformidade POSIX, usado como /bin/sh no Debian e Ubuntu.

A principal diferença entre eles é a sintaxe, os recursos adicionais e a velocidade. Para scripts portáveis, é recomendado usar apenas recursos POSIX (sh). Para scripts do sistema, o Bash é comum por sua disponibilidade e riqueza de funcionalidades.

Futuro

O Bash continua sendo mantido ativamente, com novas versões lançadas periodicamente. A versão 5.0 foi lançada em 2019, trazendo melhorias como suporte a BASH_REMATCH e novos recursos de expansão. O Bash é parte integrante do subsistema Windows para Linux (WSL) e está presente em praticamente todos os sistemas Linux e macOS.

No entanto, novos shells como Zsh e Fish estão ganhando popularidade entre desenvolvedores por suas características modernas. Apesar disso, o Bash permanece essencial para scripts de sistema e automação, e seu aprendizado é fundamental para qualquer profissional de TI. O futuro do Bash é de coexistência com outros shells, mantendo-se como o padrão de fato em ambientes Linux.

Boas práticas e observações finais

Ao escrever scripts, prefira usar #!/bin/bash se precisar de recursos específicos do Bash. Para scripts que devem funcionar em qualquer shell POSIX, use #!/bin/sh e evite extensões. Sempre verifique a sintaxe com bash -n script.sh e teste em diferentes ambientes.

Lembre-se de que o shell é uma ferramenta poderosa, mas também pode ser perigosa. Use aspas em variáveis para evitar expansões indesejadas e evite executar comandos de fontes não confiáveis.

Referências

Exercícios

  1. Explique a diferença entre o Bourne shell (sh) e o Bash.

    ✓ Resposta: O Bourne shell (sh) é o shell Unix original, com sintaxe simples e recursos limitados. O Bash (Bourne Again SHell) é uma evolução que adiciona recursos como arrays, expansão de chaves, comandos built-in e melhorias na programação. O Bash é compatível com sh, mas oferece muito mais funcionalidades.
  2. Quem criou o Bash e em que ano?

    ✓ Resposta: O Bash foi criado por Brian Fox em 1987 para o projeto GNU.
  3. Cite dois shells alternativos ao Bash e uma característica de cada.

    ✓ Resposta: Zsh: suporte a temas e plugins, autocomplete avançado. Fish: sintaxe simplificada e autocomplete inteligente.
  4. Por que /bin/sh pode ser um link simbólico para outro shell?

    ✓ Resposta: Para manter compatibilidade com scripts que usam #!/bin/sh. Em muitas distribuições, o shell apontado é o dash (Debian Almquist shell) por ser mais leve e rápido, mas ainda compatível com POSIX.
  5. Qual é a principal vantagem de usar Bash em vez de sh em scripts modernos?

    ✓ Resposta: O Bash oferece recursos adicionais como arrays, operadores de teste [[ ]], expansão de chaves e substituição de processos, que facilitam a escrita de scripts mais complexos e legíveis.