Bash
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.
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. No dia 7 de junho de 1989, a versão beta 0.99 do Bash foi disponibilizada. 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.
Imagem: Eva Rinaldi Celebrity Photographer · BY-SA · Openverse
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: É possível customizar o ambiente do Bash utilizando alguns arquivos, como: 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.
Sintaxe
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.
Comandos
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).
Funções
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.
Parâmetros
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:
Expansões
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:
Redirecionamentos
É 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 >.
Imagem: Sean MacEntee · BY · Openverse
Bourne shell
Como uma alternativa ao Bourne shell (sh), o Bash implementa algumas funcionalidades extras. Por exemplo:
Korn shell
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:
Imagem: Eva Rinaldi Celebrity Photographer · BY-SA · Openverse
Um exemplo de script em Bash com comentários sobre algumas de suas funcionalidades mencionadas neste artigo pode ser observado abaixo.


