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:
username@hostname diretório_atual tipo_de_shellNo Debian/Ubuntu, o prompt terá a seguinte aparência:
fernando@meucomputador:~$root@meucomputador:~#No Red Hat/CentOS, o prompt terá a seguinte aparência:
[fernando@meucomputador ~]$[root@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)
Estrutura da linha de comando
Section titled “Estrutura da linha de comando”A maioria dos comandos no shell seguem a mesma estrutura básica:
comando [opção(ões)/parâmetro(s)...] [argumento(s)...]Exemplo de comando:
ls -l /homels: Comando que será executando-l: Opção que modificará o comportamento do comando. As opções podem ser usadas no formato curto-lou no formato longo--format=long. Múltiplas opções podem ser usadas juntas, por exemplo,-laao invés de-l -a./home: Dados exigidos pelo programa.
Tipos de comportamentos do programa
Section titled “Tipos de comportamentos do 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
PATHpara procurar um arquivo executável com o mesmo nome do comando.
O comando type mostra a que tipo pertence um comando específico:
type echo
# Saída do comandoecho is a shell builtintype man
# Saída do comandoman is /usr/bin/manCitações
Section titled “Citações”No Bash, há 03 tipos de citações:
- Aspas duplas
- Aspas simples
- Caracteres de escape
Aspas duplas
Section titled “Aspas duplas”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:
echo I am $USER
# Saída do comandoI am fernandoecho "I am $USER"
# Saída do comandoI am fernandoUm caractere de espaço, por outro lado, perdeu seu significado como separador de argumentos:
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 novotouch "novo arquivo"
# Saída do comando-rw-rw-r-- 1 fernando fernando 0 ago 10 17:18 novo arquivoEm 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.
Aspas simples
Section titled “Aspas simples”As aspas simples revogam qualquer significado especial de cada caractere.
Por exemplo:
echo I am $USER
# Saída do comandoI am fernandoecho 'I am $USER'
# Saída do comandoI am $USERO comando exibe a sequência exata, sem substituir a variável.
Caracteres especiais
Section titled “Caracteres especiais”Os caracteres especiais removem os significados especiais dos caracteres do Bash.
echo $USER
# Saída do comandofernandoecho \$USER
# Saída do comando$USERColocando a \ (barra invertida) antes do $ o significado especial do cifrão é cancelado. O Bash irá interpretar o nome da variável literalmente.