close
Ir para o conteúdo

Bash

Origem: Wikipédia, a enciclopédia livre.
BERJAYA Nota: Para outros significados, veja Bash (desambiguação).
Bash
Outros nomesGNU Bash
Bourne-Again Shell
AutorBrian Fox
DesenvolvedorChet Ramey
Lançamento inicialc. 7 de junho de 1989; há 36 anos[nota 1]
Lançamento estável
5.3[1] / 3 de julho de 2025; há 10 meses[2]
Repositório
Escrito emC
Sistema
operacional
Unix-like e Windows
Incluído comLinux e macOS
AntecessorBourne shell
PadrãoPOSIX
Disponível em42 idiomas
Tiposhell
LicençaGPLv3
Websitewww.gnu.org/software/bash/ Edit this on Wikidata

GNU Bash, ou simplesmente Bash, é um interpretador de comandos e uma linguagem de script do tipo shell pertencente ao Projeto GNU e desenvolvida para sistemas operacionais tipo Unix.

Acrônimo para "Bourne-Again SHell", seu nome consiste em um trocadilho com seu antecessor, Bourne shell, com o qual é retrocompatível, garantindo que a maioria de seus scripts possam ser executados pelo Bash sem modificação. Semelhante a outros shells Bourne, o Bash permite a execução de instruções diretamente pela linha de comando ou através de arquivos de texto conhecidos como shell scripts. Além de comandos internos, o usuário também pode interagir com arquivos binários presentes no sistema, como as ferramentas coreutils.[3][4][5]

Lançado em 1989 por Brian Fox e mantido por Chet Ramey,[nota 1][3][7] o Bash apresenta recursos e características de uma linguagem de programação de alto nível: estruturas de controle (comandos compostos), variáveis e funções são alguns exemplos.[4][5] Além disso, suporta 42 idiomas diferentes[8] e oferece novas funcionalidades em relação ao Bourne shell, tanto para programação quanto para uso interativo, como controle de trabalhos, edição de linha de comando e histórico de comandos ilimitado. É atualmente distribuído sob a terceira versão do GPL e é compatível com as normas POSIX, característica herdada de seu antecessor, o que permite a sua execução em diversos sistemas Unix-like.[3][4][5]

Apesar de ser desenvolvido para sistemas desse tipo, como Linux (no qual é o shell padrão em muitas distribuições), FreeBSD, OpenBSD, NetBSD, Solaris e macOS, o Bash já foi portado para sistemas Windows, pelo Cygwin e pelo WSL.[9][10]

História

[editar | editar código]
BERJAYA
Brian Fox, autor do Bash.

Em 1987, pela Free Software Foundation, Brian Fox começou a desenvolver um clone do Bourne shell, a pedido de Richard Stallman, utilizando a linguagem de programação C, de forma que atendesse ao padrão POSIX e que fosse parte do Projeto GNU sob a licença GPL. Essa alternativa livre e de código aberto consistia no Bash e na biblioteca Readline, que nos primeiros estágios de desenvolvimento ainda não era separada do shell.[7] No dia 7 de junho de 1989, a versão beta 0.99 do Bash foi disponibilizada.[6]

Nesse mesmo ano, enquanto trabalhava para a Case Western Reserve University, Chet Ramey, insatisfeito com os shells disponíveis no momento, buscou alternativas que fornecessem funcionalidades mais interativas, como controle de trabalhos, edição de linha de comando e histórico de comandos. Após encontrar uma cópia de uma das primeiras versões do Bash, Chet implementou parte das funcionalidades que desejava e algumas correções de falhas presentes no software. Após enviar os patches para Brian, Chet começou a participar mais ativamente do desenvolvimento do projeto, até tornar-se um de seus co-mantenedores e, com a saída de Brian em 1990, assumir a sua liderança em 1990.[7]

Chet Ramey ainda é o principal desenvolvedor do Bash e, segundo ele, suas contribuições compõem a grande maioria das novidades adicionadas ao software em anos de desenvolvimento.[3][7] Ainda de acordo com Chet, o Bash carrega um legado importante para a infraestrutura de computadores e é considerado uma peça essencial para o funcionamento de vários sistemas Linux, macOS e Solaris.[7]

Originalmente desenvolvido para sistemas operacionais tipo Unix,[3][5][7][9] o Bash foi um dos primeiros programas portados para o Linux por Linus Torvalds.[7][11] Em sistemas como esse, o Bash é comumente o shell padrão. Ele também está incluso em coleções de pacotes do OpenBSD, do NetBSD e do sistema Ports do FreeBSD, além de ser distribuído pelo Solaris e pelo macOS, que inclui o programa nativamente no sistema. Já no Windows, o Bash pode ser adquirido através do Cygwin ou acessado pelo WSL. Outros sistemas compatíveis com o Bash são: AIX, HP-UX e MINIX.[9][10]

Características

[editar | editar código]

Associado ao Projeto GNU, o Bash é um software livre e de código aberto distribuído sob o GPLv3, suportando versões idênticas ou superiores à licença. Além de oferecer compatibilidade reversa com o Bourne shell, o Bash apresenta funções únicas e outras incorporadas de projetos como o Korn shell e o C shell (csh e tcsh), com destaque para:

Quaisquer dados inseridos por um usuário na linha de comando ou lidos em um script são interpretados como tokens pelo Bash. Um token pode ser uma palavra (unidade sintática mais simples do shell) ou um operador, que exerce funcionalidades de controle e redirecionamento de dados. Para impedir que operadores ou caracteres reservados recebam tratamentos especiais, o Bash permite a utilização de aspas simples (') e duplas (") para evitar que alguns campos sejam expandidos. A barra inversa (\) serve como um caractere de escape e possui uma funcionalidade semelhante: alguns caracteres, como o sinal de dólar ($), as aspas e a própria contrabarra, perdem suas funções especiais ao serem precedidos por \. Além disso, qualquer sequência de caracteres iniciada por uma cerquilha (#) é ignorada pelo shell e considerada um comentário.[4]

O Bash é capaz de executar comandos internos e binários. Arquivos de texto também podem ser considerados comandos, desde que sejam executáveis e seu conteúdo possa ser interpretado pelo Bash, ou seja, devem conter outros comandos. Arquivos desse tipo, conhecidos como shell scripts, permitem ao usuário criar ambientes de trabalho personalizados.

Comandos no Bash seguem uma estrutura simples: após o nome do comando, palavras separadas por espaços em branco (definidos por um sinal de espaço ou de tabulação) são interpretadas como argumentos e transmitidos aos programas. Dois ou mais comandos podem ser encadeados com os operadores | e |&. Comandos compostos são formados a partir de estruturas específicas, como as de repetição (until, while e for) e as de seleção (if, case e select).

Além disso, comandos podem ser agrupados com o auxílio de alguns operadores: && (conjunção), || (disjunção), & (envia o processo para o segundo plano) e ;. Os dois últimos operadores também podem delimitar o fim de uma sequência de comandos, assim como uma quebra de linha.[4][5]

Funções

[editar | editar código]

Funções permitem o agrupamento de comandos para serem reutilizados múltiplas vezes ao invocar apenas o nome do grupo, como um simples comando. No Bash, elas são definidas através da palavra reservada function ou ao preceder a sequência de procedimentos pelo nome da função, seguido de um par de parênteses. As funções, além de possuírem seus próprios parâmetros e um escopo local de variáveis, podem ser recursivas.[4][5]

Parâmetros

[editar | editar código]

No Bash, um parâmetro, como uma variável, é uma entidade que armazena valores. Variáveis no Bash são parâmetros identificados por um nome aos quais são atribuídos valores por expressões do tipo nome=valor.

Existem dois outros tipos de parâmetros no Bash: parâmetros posicionais e parâmetros especiais. Aos posicionais, são atribuídos os argumentos fornecidos a um script ou a uma função. Ao invés de nomes, parâmetros posicionais são identificados por números, que correspondem à posição de cada argumento. Além desses, alguns parâmetros recebem tratamentos especiais pelo Bash:

  • * expande os parâmetros posicionais como uma única sequência de caracteres;
  • @ expande os parâmetros posicionais como um arranjo, separando cada parâmetro;
  • # expande para a quantidade de parâmetros posicionais;
  • ? expande para o status de saída do último comando;
  • - expande para as opções de invocação do shell;
  • $ expande para o identificador de processo do shell;
  • ! expande para o identificador de processo do último programa colocado em segundo plano; e
  • 0 expande para o nome do shell ou do script.[4][5]

Expansões

[editar | editar código]

Expansões são mecanismos que permitem substituir, gerar e alterar valores relacionados a parâmetros, a comandos e ao ambiente do shell. As seguintes expansões são suportadas pelo Bash:

  • expansão de chaves, que gera múltiplas sequências de caracteres;
  • expansão do til, que substitui o sinal diacrítico til (~) pelo diretório pessoal do usuário;
  • expansão de parâmetro, que expande e manipula o valor de variáveis;
  • substituição de comando, que substitui instruções pelas suas próprias saídas;
  • expressões aritméticas, que são validadas e substituídas pelos seus resultados;
  • substituição de processos, que substitui saídas e entradas de comandos por referências a arquivos;
  • divisão de palavras, que divide uma sequência de caracteres em múltiplas palavras;
  • expansão de nome de arquivo, que expande padrões como *, ? e [...] para nomes de arquivos; e
  • remoção de aspas, que remove aspas e barras inversas que não sofreram expansões.[4][5]

Redirecionamentos

[editar | editar código]

É possível manipular os canais de entrada/saída de comandos no Bash, duplicando-os, abrindo-os, fechando-os e redirecionando-os para diferentes arquivos, alterando o fluxo de informações e dados que normalmente seriam exibidos para o usuário, através dos caracteres < e >.[4][5]

Arquivos de inicialização

[editar | editar código]

É possível customizar o ambiente do Bash utilizando alguns arquivos, como:

  • /etc/profile;
  • ~/.bash_profile;
  • ~/.bash_login;
  • ~/.profile;
  • ~/.bash_logout; e
  • ~/.bashrc.

Quando o Bash é invocado em uma sessão de login, o arquivo /etc/profile, caso exista, é lido e seus comandos são executados. Após isso, ele procura pelos arquivos ~/.bash_profile, ~/.bash_login e ~/.profile, nessa ordem, e executa os comandos do primeiro arquivo existente. Além disso, caso o arquivo ~/.bash_logout exista, seus comandos são executados após uma instrução exit ser fornecida.

Alternativamente, quando executado em uma sessão interativa que não seja de login, o Bash tenta executar os comandos presentes no arquivo ~/.bashrc.[4][5]

Localização

[editar | editar código]

A internacionalização e tradução do Bash para outros idiomas diferentes do inglês é feita pelo Translation Project, que disponibiliza traduções para 41 idiomas diferentes, incluindo o português europeu e o português brasileiro.[3][8]

Comparação com outros shells

[editar | editar código]

Bourne shell

[editar | editar código]

Como uma alternativa ao Bourne shell (sh), o Bash implementa algumas funcionalidades extras. Por exemplo:

  • a palavra reservada !;
  • o comando interno command;
  • atualizações para os comandos internos read, umask e test;
  • expansão de comandos com $();
  • expansão de chaves para variáveis com ${};
  • possibilidade de definir variáveis e funções com o mesmo nome;
  • variáveis locais restritas ao escopo de uma função;
  • possibilidade de desativação ou reescrita de comandos internos; e
  • correções de vulnerabilidades.[5]

Korn shell

[editar | editar código]

Tanto o Bash quanto o Korn shell (ksh) atendem às normas POSIX e são compatíveis com scripts sh. Muitas novidades adicionadas ao Bash são derivadas do ksh, o que garante algumas funcionalidades comuns para ambos, como:

Um exemplo de script em Bash com comentários sobre algumas de suas funcionalidades mencionadas neste artigo pode ser observado abaixo.

#!/bin/bash
# A linha acima, mesmo comentada, indica qual interpretador de comandos (shell)
# será utilizado para executar este script. Nesse caso, o Bash.

# Mostra o nome do script (ou sua localização no armazenamento do sistema) e as
# opções de invocação do shell.
#
# "0" e "-" são parâmetros especiais do Bash.
echo "${0} em execução com as seguintes opções de invocação do Bash: ${-}."

# Exibe na tela "Olá, ", o nome do usuário e um ponto de exclamação.
#
# "${USER}" é um exemplo de expansão de parâmetro. A variável "USER" é definida
# no momento do login.
echo "Olá, ${USER}!"

# Mostra o diretório de trabalho do usuário no momento da execução do script.
#
# "$(pwd)" é um exemplo de substituição de comando.
echo "Seu diretório de trabalho atual é: $(pwd)."

# Atribui o valor "0" à variável "total".
total="0"

# Utiliza a estrutura de repetição "for" para mapear arquivos ocultos presentes
# na pata pessoal do usuário e atribuí-los à variável "arquivo_oculto". Aqui, a
# expressão "~/.*" é um exemplo de expansão do til e de nome de arquivo.
for arquivo_oculto in ~/.*; do
    # Verifica se o arquivo existe e se ele é regular.
    if [[ -f "${arquivo_oculto}" ]]; then
        # Incrementa o valor da variável "total" em uma unidade.
        total="$((total + 1))"
    # Fecha o escopo da estrutura de seleção "if".
    fi
# Fecha o escopo da estrutura de repetição "for".
done

# Exibe o total de arquivos ocultos no diretório pessoal do usuário.
#
# "HOME" é a variável cujo valor foi o resultado da expansão do til em "~/.*".
echo "Total de arquivos ocultos no diretório ${HOME}: ${total}."

# Verifica se o comando "uname" existe e pode ser executado.
if [[ -x "$(command -v uname)" ]]; then
    # Exibe a versão/release do kernel da máquina do usuário.
    echo "A versão local do kernel é: $(uname -r)."
fi

Ver também

[editar | editar código]

Notas

  1. 1 2 A versão 0.99 do Bash, ainda em fase beta, foi disponibilizada no dia 7 de junho de 1989.[6] A data de lançamento da sua primeira versão estável é uma aproximação.

Referências

  1. «Index of /gnu/bash» [Índice de /gnu/bash]. Projeto GNU (em inglês). 30 de julho de 2025. Consultado em 30 de dezembro de 2025. Cópia arquivada em 12 de dezembro de 2025
  2. 1 2 3 4 5 6 7 «GNU Bash». Projeto GNU (em inglês). 22 de setembro de 2020. Consultado em 9 de abril de 2026. Cópia arquivada em 20 de dezembro de 2025
  3. 1 2 3 4 5 6 7 8 9 10 «Bash Reference Manual» [Manual de Referência do Bash]. Projeto GNU (em inglês). 18 de maio de 2025. Consultado em 1 de fevereiro de 2026. Cópia arquivada em 18 de dezembro de 2025
  4. 1 2 3 4 5 6 7 8 9 10 11 12
  5. 1 2 Fox, Brian; Tower Jr., Leonard H. (7 de junho de 1989). «Bash is in beta release!» [O Bash está em versão beta!] (em inglês). Grupo de notícias: gnu.announce. Consultado em 14 de abril de 2026. Cópia arquivada em 10 de fevereiro de 2026
  6. 1 2 3 4 5 6 7 «The A-Z of Programming Languages: BASH/Bourne-Again Shell» [O Guia Completo das Linguagens de Programação: BASH/Bourne-Again Shell]. Computerworld (em inglês). Consultado em 9 de abril de 2026. Arquivado do original em 11 de agosto de 2016
  7. 1 2 «The bash textual domain» [O domínio textual do Bash]. Translation Project (em inglês). 1 de março de 2026. Consultado em 10 de abril de 2026. Cópia arquivada em 10 de abril de 2026
  8. 1 2 3 Ramey, Chet (24 de fevereiro de 2026). «The GNU Bourne-Again SHell». Case Western Reserve University (em inglês). Consultado em 9 de abril de 2026. Cópia arquivada em 25 de março de 2026
  9. 1 2 «O que é o Subsistema do Windows para Linux?». Microsoft Learn. 21 de maio de 2025. Consultado em 22 de abril de 2026. Cópia arquivada em 15 de dezembro de 2025
  10. Verma, Adarsh (25 de agosto de 2016). «Linus Torvalds's Famous Email — The First Linux Announcement» [O Famoso E-mail De Linus Torvalds — O Primeiro Anúncio Do Linux]. Fossbytes (em inglês). Consultado em 30 de dezembro de 2025. Cópia arquivada em 23 de novembro de 2025

Ligações externas

[editar | editar código]