O shell é um interpretador de comandos bastante similar ao prompt do DOS, nos Windows 3.1 e 98, que permite que você digite comandos, abra programas e manipule arquivos. Ao contrário do universo Windows, onde o prompt DOS é um ambiente fixo com flexibilidade limitada, os shells Unix são pequenos programas de aplicação que roda e processa quando você realiza o login e oferece uma variedade de interfaces de linhas de comando e capacidades para adaptar diferentes usuários e aplicações.

No mundo Unix (refletindo no Linux) há muitos shells para se escolher. Cada shell oferece diferentes conjuntos de benefícios e capacidades e a maioria oferece os seus próprios script de linguagens, que lhe permite criar programas bastante sofisticados e similares – no entanto, mais poderosos – do que arquivos batch do DOS (aqueles com a extensão .BAT).


Comparação entre Shells


Há duas classes principais de shell – aqueles cuja sintaxe e design derivam-se do Bourne Shell e aqueles que se baseiam no Shell C.

Bourne Shell (sh): Visto por muitos como o shell original Unix. De forma geral, é um pouco limitado, não tendo recursos como lista de históricos e edição de linha de comando. No entanto, como é o shell original do Unix, muitos dos seus recursos são encontrados em shells mais modernos. É muito raro encontrar sistemas modernos que utilizam o Bourne Shell como shell padrão.

C Shell (csh): Shell Unix desenvolvido para oferecer um conjunto de comando e ambiente de script derivado da sintaxe da popular linguagem de programação C. Como o Bourne Shell, o C Shell não trazia alguns recursos importantes, como a edição da linha de comando. No entanto, introduziu alguns conceitos importantes que hoje são encontrados até mesmo em shells baseados no Bourne Again. Entre os conceitos introduzidos pelo C Shell, podemos destacar a idéia que certas funções do shell, como cálculos aritméticos e teste de comparação, podem ser feitos pelo próprio shell. No caso do Bourne Shell, estas tarefas requerem a chamada de programas externos. O Enhanced C Shell (tcsh), que adiciona edição de linha de comando e outros recursos encontrados no bash, é normalmente vindo com a maioria das distribuições Linux como shell alternativo.

Bourne Again Shell (bash): O bash é o shell mais comum instalado com as distribuições Linux. Baseado no Bourne Shell, o bash oferece um conjunto de novidades, incluindo a edição de linha de comando, lista da história e complementação do nome de arquivo. Com o bash, é possível escrever scripts sofisticados em shell usando sintaxe Bourne Shell.

Korn Shell (ksh): Outro da família de shells que é derivado do Bournel Shell. Alguns afirmam que o Korn Shell é o mais popular shell Unix em uso; no entanto, geralmente não é o shell padrão na maioria dos sistemas Linux. Provavelmente, foi o primeiro a introduzir muitos dos recursos populares que observamos no bash, incluindo a edição de linha de comando. Ele também foi um dos primeiros shells a trazer diversos benefícios introduzidos no C Shell para o universo Bourne Shell.

Outros Shells: Há muitos outros shells disponíveis, com suas próprias interfaces de linha de comando. Estes shells incluem o Adventure Shell (ash); Extensible Shell (es); o ERGO Shell (esh); e o Z Shell (zsh), que como o bash, traz junto recursos de vários shells e é similar ao Korn Shell.


Experimentando com Diferentes Shells


Você pode tentar diferentes shells sem tornar nenhum deles como o padrão simplesmente executando-os como um programa dentro do seu shell padrão. Por exemplo, o Enhanced C Shell vem pré-instalado, embora o bash é configurado para ser o shell padrão para todos os usuários. Se você quiser tentar o tcsh, entre com o comando
$ tcsh

Este comando assume que o tcsh está em seu caminho; se não, você precisará incluir um caminho apropriado para o shell, como /Bin/tcsh. Uma vez feito isso, o Enhanced C Shell executa e você é trocado para aquele shell. Ao digitar exit, é retornado o shell padrão. Na maioria dos sistemas Linux, você encontrará um link simbólico do /bin/sh to /bin/tcsh, então usando este comando
$ csh

também abrirá o Enhanced C Shell.

Se você pretende experimentar com diferentes shells, você pode usar esta técnica para tentar todas elas, antes de trocar o seu shell padrão. Para mudar o shell padrão que executa quando você loga no sistema, você precisa mudar sua entrada no arquivo de senha do Unix. Você consegue isso usando o comando chsh. Considere como exemplo que o usuário eu, cujo shell padrão é atualmente /bin/bash. A entrada atual no arquivo de senha do Unix parecerá assim:
eu ::790:103:eu:/home/eu:/bin/bash

Nesta entrada de senha, a última seção especifica o shell como /bin/bash. Rodando o comando
$ chsh -s /bin/tcsh eu

modifica o shell de eu para /bin/tcsh. A entrada resultante para eu no arquivo de senha do Unix seria.
eu::790:103:eu:/home/eu:/bin/tcsh

e, na próxima vez que eles logarem, o Enhanced C Shell seria o shell deles, ao invés do bash.

No próximo artigo, faremos uma análise básica sobre o bash. Aguardem e até lá!