Escolar Documentos
Profissional Documentos
Cultura Documentos
Bash
Joel Saade
Novatec Editora
www.novateceditora.com.br
Guia de Consulta Rápida Bash de Joel Saade
ISBN: 85-7522-006-3
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
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.
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
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
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).
12
Linha de comandos do Bash
13
Linha de comandos do Bash
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