Você está na página 1de 15

Guia de Consulta Rápida

Bash

Joel Saade

Novatec Editora
www.novateceditora.com.br
Guia de Consulta Rápida Bash de Joel Saade

Copyright2001 da Novatec Editora Ltda.

Todos os direitos reservados. É proibida a reprodução desta


obra, mesmo parcial, por qualquer processo, sem prévia
autorização, por escrito, do autor e da Editora.

ISBN: 85-7522-006-3

Novatec Editora Ltda.


Rua Cons. Moreira de Barros 1084 Conj. 01
02018-012 São Paulo Brasil
Tel.: +55 11 6959-6529
Fax: +55 11 6950-8869
E-mail: novatec@novateceditora.com.br
Site: www.novateceditora.com.br

2
Sumário

Introdução .................................................................................. 5
Kernel .................................................................................... 5
Shell ...................................................................................... 5
O que é o Bash ..................................................................... 6
Acionando o Bash ................................................................. 6
Modos de operação do Bash ................................................. 6
Modo interativo ................................................................. 6
Modo não-interativo .......................................................... 7
Modo restrito ..................................................................... 7
Shell scripts ...................................................................... 8
Personalização de prompts ................................................... 9
Arquivos de configuração .................................................... 10
Teclas de controle ................................................................. 11
Linha de comandos do Bash .................................................... 12
Edição da linha de comandos .............................................. 12
Readline .......................................................................... 12
Teclas de edição básicas ................................................ 12
Arquivo de comandos executados (history) .................... 13
Processamento da linha de comandos ................................ 13
Pesquisa e execução de comandos .................................... 14
Quoting ................................................................................ 15
Quoting ANSI-C .............................................................. 17
Tradução conforme o local ............................................. 18
Comentários ........................................................................ 18
Continuação da linha de comandos .................................... 18
Comandos compostos do shell ................................................ 19
Pipeline ........................................................................... 19
Named pipes ................................................................... 20
Listas de comandos ........................................................ 20
Agrupamento de comandos ............................................ 21
Expansões ............................................................................... 22
Expansão com chaves ........................................................ 22
Expansão com til ................................................................. 23
Expansão de parâmetro ...................................................... 23
Expansão aritmética ............................................................ 25
Substituição de comando .................................................... 25
Substituição de processo .................................................... 26
Separação de palavras ........................................................ 26
Expansão de nome de arquivo (globbing) ........................... 26
Correspondência de padrões (Pattern matching) ........... 27
Redirecionamento .................................................................... 29
File descriptors .................................................................... 29
Redirecionamento de entrada ............................................. 29
Redirecionamento de saída ................................................. 30
Redirecionamento de saída com acréscimo ao final (append)
30

3
Sumário

Redirecionamento da saída e saída de erro padrões .......... 31


Ordem de redirecionamento ................................................ 31
Duplicação de file descriptors .............................................. 31
Duplicação da entrada-padrão ........................................ 31
Duplicação da saída-padrão ........................................... 32
Abertura de file descriptors para leitura e gravação ............ 32
Arquivos especiais usados em redirecionamentos .............. 32
Here documents .................................................................. 33
Comandos internos do Bash .................................................... 34
Execução do Bash ............................................................... 34
Comandos básicos .............................................................. 35
Comandos de edição e history ............................................ 36
Comandos de controle do ambiente .................................... 39
Comandos de programação ................................................ 47
Comandos de controle de jobs ............................................ 66
Comandos de controle de processos .................................. 68
Elementos básicos da programação Bash ............................... 70
Operadores ......................................................................... 70
Variáveis .............................................................................. 72
Escopo de variáveis ........................................................ 72
Arrays .................................................................................. 74
Palavras reservadas do Bash .............................................. 77
Funções ............................................................................... 78
Variáveis predefinidas .............................................................. 79
Parâmetros posicionais ....................................................... 85
Parâmetros especiais ..................................................... 85
Outros recursos ........................................................................ 87
Sinais ................................................................................... 87
Expressões condicionais ..................................................... 90
Verificação de status de arquivos ................................... 90
Manipulação de strings ................................................... 91
Manipulação de valores numéricos ................................. 92
Informações adicionais ............................................................. 93
Onde obter informações na Internet .................................... 93
Notações utilizadas neste guia ............................................ 93
Sobre o autor ....................................................................... 93

4
Introdução

Introdução
Os sistemas operacionais Unix/Linux são compostos de
dois grandes módulos: o kernel e o shell.

Kernel
É o módulo que fica residente em memória enquanto o
computador estiver em operação. Fornece serviços básicos
para outros componentes do sistema operacional e para
aplicações em execução. É responsável pelo gerenciamento
de processos e de recursos, como memória, CPU e discos.

Shell
É o módulo que atua como interface entre o usuário e o
sistema operacional. Possui um conjunto de comandos
internos (built in) que permite ao usuário solicitar serviços
do sistema operacional. Implementa também uma
linguagem de programação que dispõe de comandos de
decisão, de controle de fluxo, funções etc, permitindo a
elaboração de pequenos programas, denominados shell
scripts (pág. 8).
O fato de o shell ser um programa independente do kernel
levou ao desenvolvimento de vários shells ao longo da
história do Unix. O primeiro shell foi o Bourne shell (sh),
criado por Stephen Bourne no início da década de 1970. A
partir daí novos shells surgiriam: o C shell (csh) escrito
por Bill Joy, como parte da versão Berkeley Software
Distribution (BSD) do Unix, na década de 1980; o Korn
shell (ksh); o Tenex/Tops C shell (tcsh) e o Bourne-Again
shell (Bash), objeto deste guia.

5
Introdução

O que é o Bash
É um dos vários shells disponíveis nas diversas
distribuições Linux, sendo o shell-padrão destas. O Bash,
cujo nome é um trocadilho em forma de homenagem a
Stephen Bourne, foi desenvolvido para uso no projeto
GNU, criado por Richard Stallman, da Free Software
Foundation (FSF), com o propósito de desenvolver um
sistema operacional compatível com o Unix e substituir
todos os seus utilitários comerciais por utilitários
distribuídos gratuitamente. O Bash, como shell-padrão do
sistema GNU, “nasceu” oficialmente em 10 de janeiro de
1988. Brian Fox escreveu a versão original do Bash e a
Readline (pág. 12), continuando a melhorá-los até 1993.
Atualmente, Chet Ramey é o responsável por sua
manutenção. Seguindo a filosofia do projeto GNU, todas
as versões do Bash, desde a versão 0.99, vêm se tornando
disponíveis gratuitamente pela Free Software Foundation
(FSF). Em 1995, Chet Ramey começou a trabalhar no
release 2.0 do Bash, que foi liberado em 23 de dezembro
de 1996.
O Bash inclui novos recursos, aliados aos melhores recursos
herdados dos shells C (csh), Korn (ksh) e Tenex/Tops C
(tcsh), sendo compatível com o Bourne shell (sh). Sua
última versão é a 2.04, que se tornou disponível em 17 de
março de 2000.

Acionando o Bash
Na instalação do Linux, o Bash também é instalado, ficando
disponível ao usuário no momento em que efetua o log in.
Mas é possível executar uma cópia do Bash (subshell) por
meio do comando bash (pág. 34). Para identificar o shell
instalado, digite o comando echo $SHELL.

Modos de operação do Bash


Existem três modos de operação do Bash.

Modo interativo
Modo de operação em que um prompt é exibido, indicando
que o Bash está aguardando comandos do usuário. Para
saber se o Bash é executado interativamente ou não, por
meio de um shell script, verifique o valor do parâmetro
especial - (hífen) (pág. 35). Se seu valor for i, o Bash está
em modo interativo, caso contrário, em modo não-
interativo.

6
Introdução

Exemplo:
#!/bin/bash
clear
case “$-” in
*i*) echo Modo interativo;;;;
*) echo Modo não-interativo;;;;
esac
Outra forma é verificar o valor da variável PS1 (pág. 82).
Se PS1 existir e tiver um valor não-nulo, indicará o modo
interativo, caso contrário, não-interativo.
Exemplo:
#!/bin/bash
clear
if [ -z “$PS1” ]; then
echo Modo não-interativo
else
echo Modo interativo
fi

Modo não-interativo
Modo de operação em que o Bash é acionado, por meio do
comando bash (pág. 34), com um argumento que é o nome
de um shell script e sem as opções -c e -s. O Bash lê e
executa os comandos do shell script e sai. Veja Shell scripts
(pág. 8).
Exemplo:
bash script1

Modo restrito
Modo de operação em que o Bash atua em um ambiente
mais controlado que o padrão. É acionado pelo comando
rbash ou pela opção --restricted do comando bash
(pág. 34). Nesse modo, os seguintes recursos são
desabilitados:
• Mudança de diretórios com o comando cd.
• Atribuição de valores às variáveis BASH_ENV, ENV,
PATH e SHELL.
• Uso de nomes de arquivos que contenham uma barra (/)
como argumento para o comando . (ponto).
• Uso de nomes de arquivos que contenham uma barra (/)
como argumento para a opção -p do comando hash.
• Importação de definições de funções do ambiente do
shell, na inicialização.

7
Introdução

• Redirecionamento de saída com os operadores >, >|,


<>, >&, &> e >>.
• Uso do comando exec para substituir o shell por um
outro comando.
• Adição ou eliminação de comandos internos com as
opções -f e -d do comando builtin.
• Uso da opção -p do comando command.
• Desativação do modo restrito com os comandos set +r
ou set +o restricted.

Shell scripts
Shell script é apenas um arquivo do tipo texto que contém
comandos do Bash. Veja o exemplo seguinte:
#!/bin/bash
# Shell script exemplo
clear
echo Primeiro shell script
# Fim do shell script
A primeira linha do shell script é iniciada pelos caracteres
#!, que indicam o nome do interpretador a ser usado para
interpretar o shell script, no caso, o Bash (assumindo que
esteja no diretório /bin). Assim, é possível especificar um
outro interpretador que não o Bash, por exemplo, o Perl.
Para que um shell script se torne executável, é preciso alterar
sua permissão de acesso por meio do comando chmod:
chmod +x script1
Um shell script é executado digitando-se seu nome ou por
meio dos comandos . (ponto) (pág. 47) ou source. Na
digitação do nome do shell script, é conveniente que o
diretório em que ele esteja seja determinado na variável
PATH para evitar a especificação do caminho completo.
Há uma diferença entre essas duas maneiras de se executar
um shell script. Quando são usados os comandos . (ponto)
ou source, o shell script é executado no shell corrente.
Quando o shell script é acionado por seu nome, é executado
em uma cópia do shell (subshell), com o controle sendo
passado ao shell-pai, após seu término. Assim, o comando
source script1 executa o shell script.

8
Introdução

Personalização de prompts
O Bash permite a personalização de prompts por meio de
strings, na forma de seqüências de escape, armazenadas
nas variáveis PS1, PS2, PS3 e PS4 (pág. 82).
Quando o Bash é executado interativamente, exibe o prompt
primário (valor de PS1), indicando que está pronto para
ler um comando, e o prompt secundário (valor de PS2)
para continuação de um comando em linhas subseqüentes.
As variáveis PS3 e PS4 são utilizadas pelos comandos
select (pág. 61) e set (pág. 41), respectivamente.
Seqüência Significado
\a O caractere alerta (bell).
\d Data no formato Dia_semana Mês Dia.
\e Um caractere de escape.
\h O nome do host, até o primeiro “.”.
\H O nome completo do host.
\j A quantidade de jobs gerenciada pelo Bash.
\l O nome base do “terminal device name” do shell.
\n Newline.
\r Carriage return.
\s O nome do shell, o nome base (a parte após a última
barra) da variável $0.
\t Hora no formato de 24 horas: hh:mm:ss.
\T Hora no formato de 12 horas: hh:mm:ss.
\@ Hora no formato de 12 horas: am pm.
\u O nome do usuário corrente.
\v A versão do Bash (p. ex. 2.04).
\V O release, a versão e o patchlevel do Bash (p. ex. 2.04.0).
\w O diretório de trabalho.
\W O nome base (a parte após a última barra) do valor da
variável PWD (pág. 82). Por exemplo, se PWD tiver o
valor /root/Desktop, resultará em Desktop.
\! O número do comando corrente na history list.
\# O número do comando corrente.
\$ Se o UID (User ID) efetivo for 0, será o caractere #, caso
contrário, o caractere $.
\nnn O caractere cujo código ASCII é o valor octal nnn.
\\ A barra invertida.
\[ Inicia uma seqüência de caracteres não passíveis de
exibição. Pode ser usado para inserir uma seqüência de
controle de terminal no prompt.
\] Termina a seqüência de caracteres iniciada por \[.
Exemplo:
PS1 \u \d\076
PS1=’\u \d\076'
\u
O prompt primário conterá o nome do usuário (\u \d
\u), a data (\d
\d) e o
caractere > (\076
\076
\076).

9
Introdução

Arquivos de configuração
A configuração do ambiente de trabalho de um usuário é
feita por meio de três arquivos especiais, que devem estar
presentes em seu diretório home. Cada um deles atua em
situações específicas, como mostra a tabela a seguir. Caso
esses arquivos não existam, será usado o arquivo default do
sistema, o /etc/profile.
Arquivo Utilização
~/.bash_profile É processado toda vez que se efetua um log in.
Informações adicionadas a este arquivo não
entrarão em vigor até que ele seja lido
novamente, sendo necessário efetuar log out e
em seguida log in. Os comandos . (ponto)
(pág. 47) ou source (source ~/.bash_profile)
podem ser usados para processar os comandos
do arquivo .bash_profile, inclusive os recém-
adicionados, eliminando a necessidade de log
out e log in.
~/.bashrc É processado quando um novo shell (subshell)
é acionado.
~/.bash_logout É processado imediatamente antes de ser
efetuado o log out. Assim, comandos para
remover arquivos temporários e outros, poderão
ser executados antes do encerramento da
sessão.
Esses arquivos permitem a execução de comandos em
momentos distintos. Se for preciso executá-los
independentemente de estar em um login shell ou em um
subshell, pode-se usar o comando source dentro do arquivo
~/.bash_profile para executar o arquivo .bashrc. Pode ser
conveniente, também, colocar no arquivo ~/.bashrc todas
as informações de personalização e chamar, no arquivo
.bash_profile, o arquivo .bashrc (source ~/.bashrc), para
que, ao se acionar um subshell, o ambiente já esteja
configurado.

10
Introdução

Teclas de controle
As configurações das teclas de controle podem variar de
sistema para sistema. A tabela seguinte apresenta-se
conforme o Linux Conectiva 6.0. Para verificar a
configuração das teclas de controle do seu ambiente, use o
comando stty -a ou consulte o manual on-line para mais
detalhes sobre este comando.
Teclas Ação
Ctrl + C Termina o comando corrente.
Ctrl + D Fim da entrada de dados via teclado.
Ctrl + M Equivale à tecla Enter.
Ctrl + S Inibe a exibição de informações na tela.
Ctrl + Q Ativa a exibição de informações na tela, inibida por
Ctrl + S.
Ctrl + U Limpa a última (ou a única) linha de comando, inteira.
Ctrl + Z Suspende (pára temporariamente) o comando corrente.
Ctrl + \ Termina o comando corrente, gravando um arquivo
dump de memória (core file). Usá-las caso Ctrl + C falhe.
Ctrl + ? Elimina o caractere à esquerda do cursor. Equivale à
tecla Backspace.

11
Linha de comandos do Bash

Linha de comandos do Bash


Edição da linha de comandos
O Bash permite, por meio da biblioteca Readline, a edição
da linha de comandos, possibilitando assim a correção de
erros cometidos na digitação de comandos.

Readline
É a interface da linha de comandos do Bash, uma biblioteca
de software desenvolvida pelo projeto GNU, que pode ser
usada por qualquer aplicação que necessite de uma interface
baseada em texto. Oferece os modos de edição emacs e vi
(baseados nos editores emacs e vi, respectivamente).
Pode ser configurada por meio de variáveis e combinações
de teclas em seu arquivo de inicialização, o /etc/inputrc.
Para que um usuário personalize a Readline, o arquivo
inputrc deverá estar em seu diretório home. O Bash ao ser
acionado, lê o arquivo inputrc e as configurações passam
a valer. Caso o arquivo inputrc seja alterado após sua leitura
pelo Bash, poderá ser processado novamente por meio das
teclas Ctr + X e Ctrl + R. As combinações de teclas podem
ser manipuladas por meio do comando bind (pág. 36) e o
nome do arquivo default, alterado por meio da variável
INPUTRC (pág. 81).

Teclas de edição básicas


Teclas Ação
Ctrl + B Move o cursor um caractere para a esquerda.
Ctrl + F Move o cursor um caractere para a direita.
Del Elimina o caractere sob o cursor.
Ctrl + D Equivale à tecla Del.
Backspace Elimina o caractere à esquerda do cursor.
Ctrl + _ Desfaz a última edição efetuada.
Ctrl + X Ctrl + U Equivale a Ctrl + _.
Ctrl + A Move o cursor para o início da linha.
Ctrl + E Move o cursor para o fim da linha.
Ctrl + L Limpa a tela, reexibindo a linha corrente no topo.
Alt + F Move o cursor para a palavra à direita.
Alt + B Move o cursor para a palavra à esquerda.

12
Linha de comandos do Bash

Arquivo de comandos executados (history)


O recurso de manipulação de comandos executados do Bash
baseia-se em uma lista na qual são armazenados os
comandos digitados. Toda vez que é efetuado um log in ou
um novo shell interativo é iniciado, o Bash lê uma lista de
comandos executados do arquivo .bash_history, do
diretório home do usuário (history file). A partir desse
momento, cada sessão interativa do Bash passa a ter sua
própria lista de comandos (history list). E quando o usuário
sai do Bash, ele salva a history list no arquivo
.bash_history.
A history list pode ser manipulada pelos comandos fc
(pág. 38) e history (pág. 39). Veja em Variáveis
predefinidas (pág. 79), as variáveis com nomes iniciados
por HIST.

Processamento da linha de comandos


Para que um comando seja processado, o Bash executa
uma série de operações, listadas a seguir, resumidamente:
1) Lê a entrada a partir de um arquivo, de um string
fornecido como argumento da opção -c do comando
bash (pág. 34) ou do terminal do usuário.
2) Divide a entrada em palavras e operadores (tokens),
obedecendo às regras de quoting (pág. 15), separando-
os por metacaracteres. Nessa etapa é efetuada, também,
a expansão de alias.
3) Separa os tokens em comandos simples e compostos.
4) Efetua as várias expansões, dividindo os tokens
expandidos em listas de nomes de arquivos, de comandos
e de argumentos.
5) Faz redirecionamentos e remove os operadores de
redirecionamento e seus operandos da lista de
argumentos.
6) Executa o comando.
7) Opcionalmente espera que o comando termine e obtém
seu código de retorno.

13
Linha de comandos do Bash

Pesquisa e execução de comandos


Após um comando ter sido separado em palavras, e se
resultar em um comando simples e em uma lista opcional
de argumentos, são executadas as seguintes operações:
1) Se o nome do comando não possuir barras (/), o Bash
tentará localizá-lo. Se existir uma função com este
nome, será executada.
2) Se o nome do comando não for o de uma função, o Bash
o procurará na lista de comandos internos (built in). Se
for encontrado, será executado.
3) Se o nome do comando não for uma função nem um
comando interno e não possuir barras (/), o Bash
procurará na variável PATH (pág. 82) um diretório que
contenha um arquivo executável com esse nome. O
Bash usa a hash table para obter os pathnames completos
dos arquivos executáveis como forma de evitar várias
pesquisas à variável PATH. A pesquisa pelos diretórios
na variável PATH será feita apenas se o comando não
for encontrado na hash table que é uma tabela contendo
o pathname completo de comandos já executados.
4) Se a procura foi bem-sucedida ou se o nome do comando
possuir uma ou mais barras (/), o Bash executará o
programa em um ambiente de execução separado.
5) Caso a execução tenha sido mal-sucedida porque o arquivo
não estava no formato executável e o arquivo não era um
diretório, será entendido como um shell script (pág. 8) e
executado.
6) Se o comando não foi iniciado assincronamente (em
background), o Bash esperará por seu término e obterá
o código de retorno.

14
Linha de comandos do Bash

Quoting
Há um conjunto de caracteres usados pelo Bash que tem
um significado especial para o próprio Bash, resultando
em operações específicas conforme o caractere e o contexto
em que é utilizado. O quoting faz com que esses caracteres
percam seus significados especiais de modo a serem usados
literalmente, como, por exemplo, o caractere $, que implica
operação de substituição de variável. Assim, o quoting fará
com que o caractere $ não implique substituição de variável,
podendo ser usado como o caractere $.
Caractere Significado
‘ Apóstrofo. Desabilita o significado especial de caracteres,
tratando-os literalmente.
! Negação lógica do código de retorno de um pipeline
(pág. 19).
“ Desabilita o significado especial de caracteres (mas não
de todos), tratando-os literalmente.
# Identifica uma linha de comentário (pág. 18).
$ Substituição de variável. $nome, é o conteúdo da variável
nome.
& Execução de comandos em background. Sintaxe:
comando &.
( ... ) Agrupamento de comandos (subshell).
* Caractere-curinga que representa quaisquer strings.
/ Separador de diretórios em pathnames.
; Separadordecomandos.Sintaxe: comando1;comando2;
comando3.
? Caractere-curinga que representa um único caractere,
qualquer que seja.
[ ... ] Conjunto de caracteres-curinga.
\ 1) Trata o caractere que o segue literalmente.
2) Indicador de continuação de linha. Um caractere \ ao
final de uma linha faz com que o Bash assuma que a linha
seguinte seja sua continuação.
‘ Acento grave. Substituição de comando (pág. 25).
{ ... } Bloco de comandos.
| Caractere pipe. Veja Pipeline (pág. 19).
~ Diretório home de um usuário.
< Redirecionamento de entrada (pág. 29).
> Redirecionamento de saída (pág. 30).
O quoting pode ser feito com o uso de caracteres de
escape, apóstrofos e aspas.

15

Você também pode gostar