O Bash (Bourne-Again SHell) é um interpretador de linha de comando amplamente utilizado em sistemas operacionais baseados em Unix, como o Linux e macOS. Ele oferece uma interface poderosa para interagir com o sistema, executar programas e automatizar tarefas. Dominar suas funcionalidades pode aumentar significativamente a produtividade de desenvolvedores, administradores de sistema e usuários avançados.
Este guia explora algumas das funcionalidades mais úteis do Bash, que auxiliam na economia de tempo e na reutilização de comandos e argumentos. Abordaremos desde o histórico de comandos até operadores de controle, fornecendo exemplos práticos e detalhados para cada recurso. O objetivo é capacitar o usuário a otimizar seu fluxo de trabalho no terminal, tornando-o mais eficiente e menos propenso a erros.
Para quem busca um resumo rápido das funcionalidades essenciais do Bash:
!!, !$, !string.Ctrl + r, Alt + ., Ctrl + a/e, Ctrl + w/u/k/y.$? (código de saída), $$ (PID da shell), $OLDPWD (diretório anterior).{a,b} (expansão de chaves), ~ (home directory), *, ?, [] (globbing/curingas) e Tab completion.alias e agrupe lógicas mais complexas com funções.fc: Edite e reexecute comandos do histórico de forma interativa.`comando` ou $(comando).;, &&, ||, |, >, >>, < para automação e lógica condicional.O histórico de comandos do Bash é uma ferramenta indispensável para evitar a redigitação e acelerar o fluxo de trabalho. Ele armazena os comandos executados anteriormente, permitindo que sejam facilmente recuperados e reutilizados.
| Comando | Descrição |
|---|---|
!! |
Repete o último comando executado na íntegra. Ex: sudo !! |
!$ |
Expande para o último argumento do comando anterior. Ex: mkdir /path/dir e depois cd !$ |
!^ |
Refere-se ao primeiro argumento do comando anterior. |
!* |
Expande para todos os argumentos do comando anterior. |
!n |
Executa o comando de número n da lista do history. |
!string |
Executa o comando mais recente que começa com a "string". |
!?string? |
Executa o comando mais recente que contém a "string". |
O Bash utiliza a biblioteca Readline para gerenciar a entrada de linha de comando, oferecendo uma série de atalhos de teclado que facilitam a edição e navegação.
| Atalho | Ação |
|---|---|
Ctrl + r |
Pesquisa incremental reversa no histórico. |
Alt + . |
Insere o último argumento do comando anterior (pode ser pressionado várias vezes). |
Ctrl + a |
Move o cursor para o início da linha. |
Ctrl + e |
Move o cursor para o fim da linha. |
Ctrl + w |
Apaga a palavra anterior ao cursor. |
Ctrl + u |
Apaga do cursor até o início da linha. |
Ctrl + k |
Apaga do cursor até o fim da linha. |
Ctrl + y |
Cola o texto apagado anteriormente (yank). |
Ctrl + l |
Limpa a tela do terminal (clear). |
O Bash possui variáveis especiais que fornecem informações sobre o ambiente atual da shell e o status dos comandos executados.
| Variável | Descrição |
|---|---|
$? |
Contém o código de saída (exit status) do último comando (0 para sucesso). |
$$ |
Expande para o PID (Process ID) da própria shell atual. |
$! |
Contém o PID do último comando executado em background. |
$0 |
O nome do script ou shell que está sendo executado. |
$n |
Argumentos posicionais passados para um script ($1, $2, ...). |
$# |
O número de argumentos posicionais passados. |
$* e $@ |
Representam todos os argumentos posicionais. "$@" é geralmente mais seguro. |
$OLDPWD |
Armazena o diretório de trabalho anterior (usado por cd -). |
"$*" vs. "$@"Embora ambos representem todos os argumentos, seu comportamento muda drasticamente quando estão entre aspas. "$@" preserva cada argumento como uma string separada, o que é essencial para lidar com argumentos que contêm espaços.
Exemplo Prático:
Considere o scripttest.sh:#!/bin/bash echo "Usando \"\$*\":" for arg in "$*"; do echo " - $arg" done echo "\nUsando \"\$@\":" for arg in "$@"; do echo " - $arg" doneAo executá-lo com
bash test.sh "arg1" "arg2 com espacos" "arg3", a saída demonstra a diferença:Usando "$*": - arg1 arg2 com espacos arg3 Usando "$@": - arg1 - arg2 com espacos - arg3Como visto,
"$@"trata cada argumento corretamente, enquanto"$*"os junta em uma única string.
As expansões e substituições são mecanismos do Bash que transformam strings em listas de arquivos, caminhos ou outros valores.
| Padrão | Descrição |
|---|---|
{a,b} |
Expansão de chaves: mkdir pasta/{docs,images} cria pasta/docs e pasta/images. |
~ |
Atalho para a home directory do usuário atual. |
* |
Corresponde a zero ou mais caracteres. Ex: ls *.txt. |
? |
Corresponde a exatamente um caractere. Ex: ls arquivo?.txt. |
[] |
Corresponde a um conjunto de caracteres. Ex: ls [abc]*.txt. |
Dica: A funcionalidade de Tab completion é uma forma de expansão interativa. Pressionar
Tabautocompleta comandos, nomes de arquivos e variáveis, economizando tempo e evitando erros de digitação.
Aliases são atalhos para comandos longos. Para torná-los permanentes, adicione-os ao seu ~/.bashrc ou ~/.bash_profile.
# Cria um alias 'll' para listar arquivos com detalhes
alias ll=\'ls -laH'
# Remove o alias
unalias ll
Para automações mais complexas, as funções são mais adequadas. Elas podem aceitar argumentos, ter lógica interna e são mais robustas que aliases.
Exemplo de Função:
Esta função cria um diretório e navega para ele em um único comando.mkcd() { mkdir -p "$1" && cd "$1" }Após adicionar isso ao seu
~/.bashrc, você pode simplesmente usarmkcd minha_nova_pasta.
fc (fix command)O comando fc permite editar e reexecutar comandos do histórico de forma interativa. Por padrão, ele abre o último comando no seu editor de texto padrão ($EDITOR).
fc: Abre o último comando para edição.fc -l 10 20: Lista os comandos do histórico de 10 a 20.fc -s git: Reexecuta o último comando que começou com git.A substituição de comandos permite que a saída de um comando seja usada como argumento para outro. A sintaxe $(comando) é preferível por ser mais legível e permitir aninhamento.
Exemplo:
echo "Hoje é $(date +%F)"exibirá a data atual formatada, como "Hoje é 2026-02-24".
Os operadores de controle permitem combinar múltiplos comandos, controlando a ordem e a lógica de execução.
| Operador | Descrição |
|---|---|
; |
Executa comandos em sequência, independentemente do sucesso. |
&& |
AND Lógico: Executa o segundo comando apenas se o primeiro for bem-sucedido. |
|| |
OR Lógico: Executa o segundo comando apenas se o primeiro falhar. |
| |
Pipe: Redireciona a saída (stdout) de um comando para a entrada (stdin) de outro. |
> |
Redireciona a saída para um arquivo, sobrescrevendo-o. |
>> |
Redireciona a saída para um arquivo, anexando ao final. |
< |
Redireciona o conteúdo de um arquivo para a entrada de um comando. |
Atenção: O operador
>sobrescreve o conteúdo do arquivo de destino sem aviso. Use-o com cuidado. Para adicionar conteúdo, prefira sempre o operador>>.
As ferramentas e funcionalidades apresentadas neste guia são apenas uma amostra do vasto poder do Bash. Ao incorporar esses recursos em seu fluxo de trabalho diário, você pode otimizar significativamente sua interação com a linha de comando. A prática leva à maestria, e a experimentação contínua com esses comandos abrirá novas possibilidades para a automação e gerenciamento de sistemas.