Skip to content

O básico do Shell

O shell é um programa que permite a comunicação por texto entre o sistema operacional e o usuário. Trata-se de um programa em modo texto que lê os dados inseridos pelo usuário e os interpreta na forma de comando para o sistema.

Existem vários shells diferentes no Linux, segue alguns exemplos:

  • bash: Bourne-again shell
  • ksh: Korn shell
  • csh: C shell
  • zsh: Z shell

No Linux, o mais comum é o shell Bash, que é o shell que usaremos em nossos exemplos.

No shell, o usuário insere comandos no chamado prompt. Para cada distribuição Linux, o prompt padrão tem uma aparência um pouco diferente, mas geralmente segue esta estrutura:

Exemplo de prompt
username@hostname diretório_atual tipo_de_shell


No Debian/Ubuntu, o prompt terá a seguinte aparência:

Exemplo de prompt
fernando@meucomputador:~$


No Red Hat/CentOS, o prompt terá a seguinte aparência:

Exemplo de prompt
[fernando@meucomputador ~]$


Componente de cada estrutura:

  • username: Nome do usuário que está executando o shell
  • hostname: Nome da máquina na qual o shell é executando
  • diretório_atual: O diretório que o shell está atualmente. Um ~ indica que o shell está no diretório Home do usuário atual.
  • tipo_de_shell: Indica o tipo de usuário que está executando o shell
    • $: Usuário comum
    • #: Superusuário (root)

A maioria dos comandos no shell seguem a mesma estrutura básica:

Estrutura da linha de comando
comando [opção(ões)/parâmetro(s)...] [argumento(s)...]

Exemplo de comando:

Exemplo de comando
ls -l /home
  • ls: Comando que será executando
  • -l: Opção que modificará o comportamento do comando. As opções podem ser usadas no formato curto -l ou no formato longo --format=long. Múltiplas opções podem ser usadas juntas, por exemplo, -la ao invés de -l -a.
  • /home: Dados exigidos pelo programa.

O shell aceita 02 tipos de comandos:

  • Internos: Comandos que fazem parte do próprio shell. Por exemplo, cd, set, export, etc.
  • Externos: Comandos que residem em arquivos individuais. Estes arquivos, geralmente, são programas binários ou scripts. Quando um comando externo ao shell é executado, o shell usa a variável PATH para procurar um arquivo executável com o mesmo nome do comando.

O comando type mostra a que tipo pertence um comando específico:

Comando type
type echo
# Saída do comando
echo is a shell builtin

No Bash, há 03 tipos de citações:

  • Aspas duplas
  • Aspas simples
  • Caracteres de escape

As aspas duplas dizem ao shell para considerar o texto entre as aspas (”…”) como caracteres regulares. Todos os caracteres especiais perdem o significado, exceto $(cifrão), \ (barra invertida) e ` (crase).

Por exemplo, a substituição da variável $USER não é afetada pelas aspas duplas:

Sem aspas
echo I am $USER
# Saída do comando
I am fernando


Um caractere de espaço, por outro lado, perdeu seu significado como separador de argumentos:

Sem aspas
touch novo arquivo
# Saída do comando
-rw-rw-r-- 1 fernando fernando 0 ago 10 17:17 arquivo
-rw-rw-r-- 1 fernando fernando 0 ago 10 17:17 novo

Em Exemplo 01, o comando touch cria dois arquivos, ele interpreta as duas palavras (novo arquivo) como argumentos individuais. Em Exemplo 02, o comando interpreta o conteúdo entre aspas duplas ("novo arquivo") com um único argumento.

As aspas simples revogam qualquer significado especial de cada caractere.
Por exemplo:

Sem aspas
echo I am $USER
# Saída do comando
I am fernando

O comando exibe a sequência exata, sem substituir a variável.

Os caracteres especiais removem os significados especiais dos caracteres do Bash.

Sem aspas
echo $USER
# Saída do comando
fernando

Colocando a \ (barra invertida) antes do $ o significado especial do cifrão é cancelado. O Bash irá interpretar o nome da variável literalmente.