SlideShare uma empresa Scribd logo
Shell Script
Versão 1.0.0
Sumário
I Sobre essa Apostila 4
II Informações Básicas 6
III GNU Free Documentation License 11
IV Shell Script 20
1 O que é Shell Script 21
2 Plano de ensino 22
2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.6 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.7 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.8 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3 Introdução 25
4 Expressões Regulares 26
4.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2 Comando grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3 Os Metacaracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.4 Metacaracteres quantificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.5 Metacaracteres tipo âncora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.5.1 Circunflexo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.5.2 Cifrão - o fim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.5.3 Borda - a limítrofe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.6 Outros metacaracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.7 Explicando-os melhor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.7.1 Escape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.7.2 Ou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.7.3 Grupo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
4.7.4 Retrovisor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5 Parte I 35
5.1 Diálogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2 O ambiente Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.3 O ambiente Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.4 Uma rápida passagem nos principais sabores de Shell . . . . . . . . . . . . . . . . . 36
5.5 Explicando o funcionamento do Shell . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.6 Caracteres para remoção do significado . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.7 Caracteres de redirecionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.7.1 Caracteres de redirecionamento . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.7.2 Redirecionamento da Saída Padrão . . . . . . . . . . . . . . . . . . . . . . . 40
5.7.3 Redirecionamento da Saída de erro Padrão . . . . . . . . . . . . . . . . . . . 41
5.7.4 Redirecionamento da Entrada Padrão . . . . . . . . . . . . . . . . . . . . . . 42
5.8 Redirecionamento de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.9 Caracteres de Ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6 Parte II 48
6.1 Diálogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.2 Eu fico com o grep, você com a gripe . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.3 A família grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.4 Exemplos da família grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.5 Vamos montar uma cdteca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.6 Passando parâmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.7 Macetes paramétricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7 Parte III 59
7.1 Trabalhando com cadeias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.2 O comando cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.2.1 O comando cut a opção -c . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.2.2 O comando cut a opção -f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.3 O comando tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.3.1 Trocando caracteres com tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.3.2 Removendo caracteres com tr . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.3.3 Xpremendo com tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.3.4 O Comando if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8 Parte IV 69
8.1 Diálogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
8.2 O comando Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
8.3 Continuação do comando test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
8.4 Encolheram o comando condicional . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
8.5 E tome de test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
8.6 Acaso casa com case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
2
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
9 Parte V 81
9.1 Comandos de Loop (ou laço) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
9.2 O Comando for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
9.2.1 Primeira sintaxe do comando for . . . . . . . . . . . . . . . . . . . . . . . . . 81
9.2.2 Segunda sintaxe do comando for . . . . . . . . . . . . . . . . . . . . . . . . . 86
9.2.3 Terceira sintaxe do comando for . . . . . . . . . . . . . . . . . . . . . . . . . 88
10 Parte VI 90
10.1 Um pouco mais de for e matemática . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
10.2 O Comando while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
10.3 O Comando Until . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
10.4 Atalhos no loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
11 Parte VII 101
11.1 O comando tput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
11.2 E agora podemos ler os dados na tela . . . . . . . . . . . . . . . . . . . . . . . . . . 103
11.3 Vamos ler arquivos? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
12 Parte VIII 112
12.1 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
12.2 O comando source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
13 Parte IX 122
13.1 Envenenando a escrita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
13.2 Principais Variáveis do Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
13.3 Expansão de parâmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
14 Parte X 132
14.1 O comando eval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
14.2 Sinais de Processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
14.3 Sinais assassinos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
14.4 O trap não atrapalha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
14.5 O comando getopts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
15 Parte XI 144
15.1 Named Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
15.2 Sincronização de processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
15.3 Bloqueio de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
15.4 Substituição de processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
3
Parte I
Sobre essa Apostila
4
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Conteúdo
O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-
ternet, disponíveis em diversos sites ou originalmente produzido no CDTC (http://www.cdtc.org.br.)
O formato original deste material bem como sua atualização está disponível dentro da licença
GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de
mesmo nome, tendo inclusive uma versão traduzida (não oficial).
A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro
de 2006. Críticas e sugestões construtivas serão bem-vindas a qualquer hora.
Autores
A autoria deste é de responsabilidade de Waldemar Silva Júnior (waldemar@cdtc.org.br).
O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento que
vêm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto com
outros parceiros institucionais, e com as universidades federais brasileiras que tem produzido e
utilizado Software Livre apoiando inclusive a comunidade Free Software junto a outras entidades
no país.
Informações adicionais podem ser obtidas através do email ouvidoria@cdtc.org.br, ou da
home page da entidade, através da URL http://www.cdtc.org.br.
Garantias
O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-
lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam
direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.
Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br) .
Permission is granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.1 or any later version published by
the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-
TILA. A copy of the license is included in the section entitled GNU Free Documentation
License.
5
Parte II
Informações Básicas
6
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Sobre o CDTC
Objetivo Geral
O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina-
ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do
desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira.
Objetivo Específico
Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e
de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os
servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado
nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios
de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo
treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários,
criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como
incentivadores e defensores dos produtos de software não proprietários e código fonte aberto, ofe-
recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de
produtos de software não proprietários e do seu código fonte livre, articulando redes de terceiros
(dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro-
dutos de software livre.
Guia do aluno
Neste guia, você terá reunidas uma série de informações importantes para que você comece
seu curso. São elas:
• Licenças para cópia de material disponível;
• Os 10 mandamentos do aluno de Educação a Distância;
• Como participar dos foruns e da wikipédia;
• Primeiros passos.
É muito importante que você entre em contato com TODAS estas informações, seguindo o
roteiro acima.
Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br).
7
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos
da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior
públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA
APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-
mentação Livre GNU".
Os 10 mandamentos do aluno de educação online
• 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é
pré-requisito para a participação nos cursos a distância;
• 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá-
tica é necessário para poder executar as tarefas;
• 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân-
cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal,
dos colegas e dos professores;
• 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus
colegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos;
• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão
e a sua recuperação de materiais;
• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e
realizá-las em tempo real;
• 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre;
• 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens
e descobertas;
• 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é
ponto - chave na comunicação pela Internet;
• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não
controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.
Como participar dos fóruns e Wikipédia
Você tem um problema e precisa de ajuda?
Podemos te ajudar de 2 formas:
A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:
. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações
que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a
8
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que
interesse ao grupo, favor postá-la aqui.
Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do
curso. É recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos mais
efetivos para esta prática.
. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo
para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas
a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem
ajudar.
Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a
formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico
é recomendável ver se a sua pergunta já foi feita por outro participante.
A segunda forma se dá pelas Wikis:
. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-
ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem
ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um
ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-
dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em português pelos links:
• Página principal da Wiki - http://pt.wikipedia.org/wiki/
Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo!
Primeiros Passos
Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:
• Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar;
• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas básicas do mesmo;
• Entrar nas lições seguindo a seqüência descrita no Plano de Ensino;
• Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais.
Perfil do Tutor
Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.
O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos
valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as
idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.
9
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,
para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor
ou instrutor:
• fornece explicações claras acerca do que ele espera e do estilo de classificação que irá
utilizar;
• gosta que lhe façam perguntas adicionais;
• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-
que motivo a classificação foi ou não foi atribuída’;
• tece comentários completos e construtivos, mas de forma agradável (em contraste com um
reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de
ameaça e de nervossismo’)
• dá uma ajuda complementar para encorajar um estudante em dificuldade;
• esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente;
• ajuda o estudante a alcançar os seus objetivos;
• é flexível quando necessário;
• mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso,
talvez numa fase menos interessante para o tutor);
• escreve todas as correções de forma legível e com um nível de pormenorização adequado;
• acima de tudo, devolve os trabalhos rapidamente;
10
Parte III
GNU Free Documentation License
11
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
(Traduzido pelo João S. O. Bueno através do CIPSGA em 2001)
Esta é uma tradução não oficial da Licença de Documentação Livre GNU em Português Brasi-
leiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a distribuição
de textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso. Entretanto,
nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL.
This is an unofficial translation of the GNU General Documentation License into Brazilian Por-
tuguese. It was not published by the Free Software Foundation, and does not legally state the
distribution terms for software that uses the GFDL–only the original English text of the GFDL does
that. However, we hope that this translation will help Portuguese speakers understand the GFDL
better.
Licença de Documentação Livre GNU Versão 1.1, Março de 2000
Copyright (C) 2000 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, mas
não é permitido alterá-lo.
INTRODUÇÃO
O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"no
sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiá-lo ou redistribui-lo,
com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantém
para o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsável
pelas modificações feitas por terceiros.
Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações do
documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge-
ral (GNU GPL), que é um copyleft para software livre.
Nós fizemos esta Licença para que seja usada em manuais de software livre, por que software
livre precisa de documentação livre: um programa livre deve ser acompanhado de manuais que
provenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita a
manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente
do assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença prin-
cipalmente para trabalhos cujo propósito seja de introdução ou referência.
APLICABILIDADE E DEFINIÇÕES
Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo
detentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença.
O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um
12
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
licenciado e é referida como "você".
Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documento
ou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outra
língua.
Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex-
clusivamente da relação dos editores ou dos autores do Documento com o assunto geral do
Documento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamente
nesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, a
Seção Secundária pode não explicar nada de matemática).
Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci-
onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo.
As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, como
sendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença.
Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de Capa
Frontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença.
Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica-
mente, representada num formato cuja especificação esteja disponível ao público geral, cujos
conteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editores
de texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou
(para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível de
servir como entrada a formatadores de texto ou para tradução automática para uma variedade
de formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formato
de arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de-
sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é
"Transparente"é chamada de "Opaca".
Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim-
ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML
usando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, e
projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos
proprietários que podem ser lidos e editados apenas com processadores de texto proprietários,
SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejam
disponíveis para o público, e HTML gerado automaticamente por alguns editores de texto com
finalidade apenas de saída.
A "Página do Título"significa, para um livro impresso, a página do título propriamente dita,
mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível,
o material que esta Licença requer que apareça na página do título. Para trabalhos que não
tenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe-
minente do título do trabalho, precedendo o início do corpo do texto.
13
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
FAZENDO CÓPIAS EXATAS
Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou não
comercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que esta
Licença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres-
cente nenhuma outra condição, quaisquer que sejam, às desta Licença.
Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção de
cópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com-
pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias,
você também precisa respeitar as condições da seção 3.
Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e também
pode exibir cópias publicamente.
FAZENDO CÓPIAS EM QUANTIDADE
Se você publicar cópias do Documento em número maior que 100, e a nota de licença do
Documento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clara
e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e
Textos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara e
legivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o título com-
pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionar
outros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estas
preservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópia
exata em outros aspectos.
Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma
legível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capa
verdadeira, e continuar os outros nas páginas adjacentes.
Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, você
precisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópia
Opaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparente
completa do Documento acessível publicamente em uma rede de computadores, à qual o público
usuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos de
protocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel-
mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurar
que esta cópia Transparente vai permanecer acessível desta forma na localização especificada
por pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta-
mente ou através de seus agentes ou distribuidores) daquela edição para o público.
É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes de
redistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover você
com uma versão atualizada do Documento.
14
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
MODIFICAÇÕES
Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se-
ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença,
com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuição
e modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Além
disso, você precisa fazer o seguinte na versão modificada:
A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do-
cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listados
na seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior se
o editor original daquela versão lhe der permissão;
B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá-
veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cinco
dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que
cinco);
C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor;
D. Preservar todas as notas de copyright do Documento;
E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente às
outras notas de copyright;
F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao público
o direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópico
abaixo;
G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos de
Capa requeridos dados na nota de licença do Documento;
H. Incluir uma cópia inalterada desta Licença;
I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendo
pelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página de
Título. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo o
título, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionar
um item descrevendo a Versão Modificada, tal como descrito na sentença anterior;
J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a uma
cópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu-
mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção
"Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicado
pelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refira
der sua permissão;
K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da
15
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri-
buidores e/ou dedicatórias dados;
L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou em
seus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção;
M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na Versão
Modificada;
N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outro
título dado a uma Seção Invariante.
Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem como
Seções Secundárias e não contenham nenhum material copiado do Documento, você pode optar
por designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seus
títulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci-
sam ser diferentes de qualquer outro título de seção.
Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual-
quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - por
exemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como a
definição oficial de um padrão.
Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente
, e uma passagem de até 25 palavras como um Texto de Quarta Capa, ao final da lista de Textos
de Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma de
Texto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade.
Se o Documento já incluir um texto de capa para a mesma capa, adicionado previamente por
você ou por acordo feito com alguma entidade para a qual você esteja agindo, você não pode
adicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior que
adicionou a passagem antiga.
O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seus
nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer
Versão Modificada.
COMBINANDO DOCUMENTOS
Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob
os termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com-
binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e liste
todas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença.
O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções Invariantes
Idênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houver
múltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de
16
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editor
origianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajuste
nos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado.
Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver-
sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combine
quaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas as
seções entituladas como "Endosso".
COLETÂNEAS DE DOCUMENTOS
Você pode fazer uma coletânea consitindo do Documento e outros documentos publicados
sob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos com
uma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópia
exata de cada um dos Documentos em todos os outros aspectos.
Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sob
esta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga esta
Licença em todos os outros aspectos relacionados à cópia exata daquele documento.
AGREGAÇÃO COM TRABALHOS INDEPENDENTES
Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se-
parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver-
são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pela
compilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outros
trabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assim
compilados, e eles não são trabalhos derivados do Documento.
Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento,
então, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capa
do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado.
Senão eles precisarão aparecer nas capas de todo o agregado.
TRADUÇÃO
Tradução é considerada como um tipo de modificação, então você pode distribuir traduções
do Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduções
requer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluir
traduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessas
Seções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in-
clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a
17
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
versão original em Inglês desta Licença, a versão original em Inglês prevalecerá.
TÉRMINO
Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres-
samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen-
ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitos
sob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob esta
Licença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em total
acordo com esta Licença.
REVISÕES FUTURAS DESTA LICENÇA
A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen-
tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versão
presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Veja
http://www.gnu.org/copyleft/.
A cada versão da Licença é dado um número de versão distinto. Se o Documento especificar
que uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, você
tem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versão
posterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o
Documento não especificar um número de Versão desta Licença, você pode escolher qualquer
versão já publicada (não como rascunho) pela Free Software Foundation.
ADENDO: Como usar esta Licença para seus documentos
Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licença
no documento e ponha as seguintes notas de copyright e licenças logo após a página de título:
Copyright (c) ANO SEU NOME.
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença
de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft-
ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos da
Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li-
cença está inclusa na seção entitulada "Licença de Documentação Livre GNU".
Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés de
dizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos de
Capa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os
Textos da Quarta Capa.
Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda-
mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre,
18
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
tal como a GNU General Public License, para permitir o seu uso em software livre.
19
Parte IV
Shell Script
20
Capítulo 1
O que é Shell Script
Shell é o nome que se dá à linha de comando em modo texto dos sistemas operacionais
Linux e UNIX. E, portanto, os shell scripts são um meio de se juntar uma porção de comandos
shell em um só arquivo para serem executados quantas vezes forem necessárias. Os arquivos
de lote (bach) do windows são similares, apenas com uma significativa diferença, já que a linha
de comando de sistemas Unix e Linux é mais poderosa.
21
Capítulo 2
Plano de ensino
2.1 Objetivo
verb Capacitar o usuário para o aprendizado básico dos comandos do Linux.
2.2 Público Alvo
Usuários que tenham perfil administrativo, desenvolvedores, programadores e interessados
em geral.
2.3 Pré-requisitos
Os usuários deverão ser, necessariamente, funcionários públicos e ter conhecimentos básicos
para operar um computador com uma distribuição baseada no Debian instalada.
2.4 Descrição
O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodle
como ferramenta de aprendizagem. O curso tem duração de uma semana e possui um conjunto
de atividades (lições, fóruns, glossários, questionários e outros) que deverão ser executadas de
acordo com as instruções fornecidas. O material didático está disponível on-line de acordo com
as datas pré-estabelecidas em cada tópico.
2.5 Metodologia
O curso está dividido da seguinte maneira:
Duração Descrição do Módulo
1 semana Expressões Regulares
2 semana Ambiente Shell e Comandos de manipulação de caracteres
Todo o material está no formato de lições, e estará disponível ao longo do curso. Ao final de
cada semana do curso será disponibilizada a prova referente ao módulo estudado anteriormente
22
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
que também conterá perguntas sobre os textos indicados. Utilize o material de cada semana e
os exemplos disponibilizados para se preparar para prova.
As lições contêm o conteúdo principal. Elas poderão ser acessadas quantas vezes forem neces-
sárias, desde que estejam dentro da semana programada. Ao final de uma lição, você receberá
uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada li-
ção, pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição seja
menor que 6.0, sugerimos que você faça novamente esta lição.
Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das lições
quanto a da avaliação serão consideradas para a nota final. Todos os módulos ficarão visíveis
para que possam ser consultados durante a avaliação final.
Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de En-
sino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma.
Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deverá ser
enviada ao fórum. Diariamente os monitores darão respostas e esclarecimentos.
2.6 Programa
O curso de CVS oferecerá o seguinte conteúdo:
• Expressões regulares;
• Ambiente Shell, Linhas de comando, Caracteres de remoção, redirecionamento e ambiente;
• A família grep, Passagens de parâmetros;
• Comando cut, Comando tr, Usando separadores, Comando condicionais;
• O comando eval, O trap não atrapalha, O comando getopts;
• Comando test, Simplificações dos comandos condicionais;
• Comandos de Loop;
• Um pouco mais de Loops e matemática;
• O comando tput;
• Funções;
• Variáveis do Shell;
• Named Pipes.
2.7 Avaliação
Toda a avaliação será feita on-line.
Aspectos a serem considerados na avaliação:
• Expressões Regulares;
23
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Ambiente Shell;
• Comandos de manipulação de caracteres;
• Capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados.
Instrumentos de avaliação:
• Participação ativa nas atividades programadas.
• Avaliação ao final do curso.
• O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação e
obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo
com a fórmula abaixo:
• Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições
• AF = Avaliações
2.8 Bibliografia
• Site http://aurelio.net/shell/
• Site: http://www.ic.unicamp.br/ celio/mc514/bash/bash.html
24
Capítulo 3
Introdução
Sejam bem vindos ao curso de Bash Básico!
O curso tem duração de apenas duas semanas e consiste na leitura de alguns livros e lições
e, ao término delas, realizar algumas avaliações. Todas essas atividades valem pontuação. Para
um bom aproveitamento do curso é importante que haja entrosamento com os materiais, os fó-
runs e os tutores. Seja participativo, questione e tire suas dúvidas. O material didático é do prof.
Júlio Neves e de fato não há nada melhor que aprender brincando. É interessante que já esteja
instalado o Linux e que deixe o terminal sempre aberto. Assim facilita acompanhar o raciocínio
da leitura. Qualquer dúvida quanto ao comando pode ser resolvida digitando no Shell:
$ man nomedocomando
ou ainda discutindo concosco no fórum. Assim aprendemos juntos a funcionalidade de cada
um.
Bom trabalho!
25
Capítulo 4
Expressões Regulares
4.1 Introdução
Uma Expressão Regular (ER) é um método formal de se especificar um padrão de texto.
É uma composição de símbolos, caracteres com funções especiais, chamados "metacaracte-
res"que, agrupados entre si e com caracteres literais, formam uma seqüência, uma expressão.
Essa expressão é testada em textos e retorna sucesso caso este texto obedeça exatamente a
todas as suas condições. Diz-se que o texto "casou"com a expressão.
A ERs servem para se dizer algo abrangente de forma específica. Definido o padrão de busca,
tem-se uma lista (finita ou não) de possibilidades de casamento. Em um exemplo rápido, [rgp]ato
pode casar "rato", "gato"e "pato"].
As ERs são úteis para buscar ou validar textos variáveis como:
• data;
• horário;
• número IP;
• endereço de e-mail;
• endereço de Internet;
• declaração de uma função ();
• dados na coluna N de um texto;
• dados que estão entre <tags></tags>;
• número de telefone, RG, CPF, cartão de crédito.
Vários editores de texto e linguagens de programação têm suporte a ERs, então, o tempo inves-
tido em seu aprendizado é recompensado pela larga variedade de aplicativos onde ele pode ser
praticado.
4.2 Comando grep
Para não precisar listar todo o conteúdo de um arquivo por completo para apenas saber os
dados do usuário "root", pode-se usar o grep para pesquisar e retornar somente a linha dele. O
26
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
comando grep tem o seguinte formato:
grep palavra arquivo
Vamos utilizar como exemplo o arquivo /etc/passwd, que é a base de usuários de um sistema
UNIX/Linux. Vale a pena, antes, verificar como que se constitui esse arquivo dando o comando:
$cat /etc/passwd
Observa-se que serão obtidas várias linhas, onde cada um se refere a um usuário diferente.
E cada linha possui o seguinte formato:
login : senha : UID : GID : Nome completo : Diretório $HOME : shellz
Voltando ao grep.
Para "pescar"somente a linha do usuário root faremos:
$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
4.3 Os Metacaracteres
Cada metacaracteres é uma ferramenta que tem uma função específica. Servem para dar
mais poder às pesquisas, informando padrões e posições impossíveis de se especificar usando
somente caracteres normais.
Os metacaracteres são pequenos pedacinhos simples, que agrupados entre si ou com carac-
teres normais formam algo maior, uma expressão. O importante é compreender bem cada um
individualmente, e depois apenas lê-los em seqüência.
Metacaracteres Representantes
São aqueles cuja função é representar um ou mais caracteres.
Ponto .
Lista [...]
Lista Negada [^...]
O ponto
O ponto é nosso curinga solitário, que está sempre à procura de um casamento não importa
com quem seja. Pode ser um número, uma letra, um TAB, um , o que vier ele traça, pois o ponto
casa qualquer coisa.
Exemplos:
"n.o"casaria: não, nao, ...
27
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
".eclado"casaria: teclado, Teclado, ...
"12.45"casaria: 12:45, 12 45, 12.45, ...
A lista
Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exatamente o que
quer, e nada diferente daquilo, a lista casa com quem ela conhece. Toda "lista"(os colchetes e
seu conteúdo) vale para apenas uma posição, um caractere, por maior que seja.
Exemplos:
n[ãa]o não, nao, ...
[Tt]eclado teclado, Teclado, ....
12[:. ]45 12:45, 12 45, 12.45, ...
A lista é de certa forma exigente. Sendo assim:
Evite Prefira:
[0123456789] [0-9]
[0-9][0-9]:[0-9][0-9] [012][0-9]:[0-5][0-9]
[A-z] [A-Za-z]
Lista negada
A lista negada é exatamente igual à lista, podendo ter caracteres literais, intervalos e classes
POSIX. Tudo o que se aplica a lista normal, se aplica à negada também.
A única diferença é que ela possui lógica inversa, ou seja, ela casará com qualquer coisa, fora os
componentes listados.
Observe que a diferença em sua notação é que o primeiro caractere da lista é um circunflexo, ele
indica que esta é uma lista negada. Então, se [0-9] são números, [^0-9] é qualquer coisa fora
números. Pode ser letras, símbolos, espaço em branco, qualquer coisa menos números. Porém,
ao iniciar o circunflexo (^) fora das chaves possui outro significado diferente: simboliza o início
de uma linha. Mas tem de ser alguma coisa. Só porque ela é uma lista negada isso não significa
que ela pode casar "nada".
Exemplos:
[A-Z^] casa maiúsculas e o circunflexo e [^A-Z^]casa tudo fora isso.
Como mandam as regras da boa escrita, sempre após caracteres de pontuação como a vírgula
ou o ponto, devemos ter um espaço em branco os separando do resto do texto.
Então, vamos procurar por qualquer coisa que não o espaço após a pontuação:
[:;,.!?][^ ]
4.4 Metacaracteres quantificadores
Os quantificadores servem para indicar o número de repetições permitidas para a entidade
imediatamente anterior. Essa entidade pode ser um caractere ou metacaractere. Em outras pa-
lavras, eles dizem a quantidade de repetições que o átomo anterior pode ter, quantas vezes ele
pode aparecer.
São eles:
opcional ?
asterisco *
mais +
28
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
chaves
Opcional
É útil para procurar palavras no singular e plural e pode ser tornar opcionais caracteres e me-
tacaracteres.
Exemplos:
Expressão Casa com
Ondas? Onda Ondas
Senadora? Senador Senadora
[BFM]?ala ala Bala Fala Mala
Asterisco
Pode aparecer em qualquer quantidade. O curinga .* é o tudo e o nada, qualquer coisa. Exem-
plos:
6*0 0, 60, 660, 6660, ..., 666666666660, ...
bi*p bp, bip, biip, biiip, biiiip...
b[ip]* b, bi, bip, biipp, bpipipi, biiiiip ...
Mais
Tem funcionamento idêntico ao do asterisco, tudo o que vale para um, se aplica ao outro. A
única diferença é que o mais (+) não é opcional, então a entidade anterior deve casar pelo menos
uma vez, e pode ter várias. Sua utilidade é quando queremos no mínimo uma repetição. Exem-
plos:
6+0 60, 660, 6660, ..., 666666660, ...
bi+p bip, biip, biiip, biiiip...
b[ip]+ bi, bip, biipp, bpipipi, biiiiip, bppp, ...
Chaves
As chaves são a solução para uma quantificação mais controlada, onde se pode especificar exa-
tamente quantas repetições se quer da entidade anterior. Colocando um número entre chaves " ",
indica-se uma quantidade de repetições do caractere (ou metacaractere) anterior. As chaves são
precisas podendo especificar um número exato, um mínimo, um máximo, ou uma faixa numérica.
Elas, inclusive, simulam o *, + e ?.
Exemplos:
n,m significa de n até m vezes, assim algo como 61,4 casa 6, 66, 666 e 6666. Só, nada mais que
isso.
0,1 zero ou 1 (igual ao opcional)
0, zero ou mais (igual ao asterisco)
1, um ou mais (igual ao mais)
3 exatamente
29
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
4.5 Metacaracteres tipo âncora
São aqueles que não casam caracteres ou definem quantidades, ao invés disso eles marcam
uma posição específica na linha. Assim, eles não podem ser quantificados, então o mais, o aste-
risco e as chaves não têm influência sobre âncoras.
São eles:
• circunflexo - ^
• cifrão - $
• borda - /b
Explicando cada metacaractere
4.5.1 Circunflexo
Este metacaractere (do tipo de posicionamento por representar uma posição específica da
linha) simboliza o início de uma linha. É também o marcador de lista negada, mas apenas dentro
da lista (e no começo), fora dela ele é a âncora que marca o início de uma linha, veja:
^[0-9]
significa que casa com uma linha começando com qualquer algarismo. O inverso disso seria:
^[^0-9]
4.5.2 Cifrão - o fim
Este é similar e complementar ao circunflexo, pois representa o fim de uma linha e só é válido
no final de uma expressão regular.
Quando demos o comando:
$ grep bash$ /etc/passwd
significa que procuramos pela palavra "bash"no final da linha, ou ainda, a palavra "bash"seguida
de um fim de linha.
Esse cifrão é o mesmo caractere que é utilizado para identificar as variáveis do shell, como $PWD
e $HOME. Para evitar possíveis problemas com a expansão de variáveis, é preciso "proteger"a
expressão regular passada ao grep. A proteção é feita colocando-se a ER entre ’aspas simples’
fazendo:
$ grep ’bash$’ /etc/passwd
Veja outros exemplos:
30
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
.
4.5.3 Borda - a limítrofe
A borda marca os limites de uma palavra, ou seja, onde ela começa e/ou termina. É muito útil
para casar palavras exatas, e não partes de palavras. Palavra aqui é um conceito que engloba
apenas letras, números e o sublinhado:
[A-Za-z0-9_]
Veja os exemplos:
Veja como se comportam as ERs nas palavras dia, diafragma, radial, melodia e bom-dia!:
• dia - - - dia, diafragma, radial, melodia, bom-dia!
• bdia - - - dia, diafragma, bom-dia!
• diab - - - dia, melodia, bom-dia!
• bdiab — dia, bom-dia!
4.6 Outros metacaracteres
Vamos ver outros metacaracteres, que têm funções específicas e não relacionadas entre si,
portanto não podem ser agrupados em outra classe fora a tradicional "outros". Mas atenção, isso
não quer dizer que eles são inferiores, pelo contrário, o poder das ERs é multiplicado com seu
uso e um mundo de possibilidades novas se abre a sua frente.
São eles:
• escape 
• ou |
• grupo ()
• retrovisor /n
4.7 Explicando-os melhor
4.7.1 Escape
Temos duas formas de casar um metacaractere dentro de uma ER:
• Usando Listas: Lua[*] casa com Lua*
31
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• "Escapando"o Caractere: Lua* casa com Lua*
Isto é, a contrabarra () "escapa"qualquer metacaractere, tirando todos os seus poderes. O es-
cape é tão poderoso que pode escapar a si próprio! O  casa uma barra invertida  literal. Então,
agora que sabemos muito sobre ERs, que tal uma expressão para casar um número de RG?
Lembre-se que ele tem o formato n.nnn.nnn-n, é fácil!
[0-9].[0-9]{3}.[0-9]{3}-[0-9]
O * = [*] = asterisco literal
Ironia -> O escape escapa o escape, escapando-se a si próprio, simultaneamente.
4.7.2 Ou
Para procurar por uma coisa ou outra, deve-se usar o pipe "|" e delimitar as opções com
os parênteses "( )". É muito comum em uma posição específica de nossa Expressão Regular
(ER) termos mais de uma alternativa possível, por exemplo, ao casar um cumprimento amistoso,
podemos ter uma terminação diferente para cada parte do dia:
boa-tarde|boa-noite
O ’ou’ serve para esses casos em que precisamos dessas alternativas. Essa ER se lê: "ou
boa-tarde, ou boa-noite", ou seja "ou isso ou aquilo". Lembre que a lista também é uma espécie
de ou (|), mas apenas para uma letra, então:
[gpr]ato é o mesmo que gato|pato|rato
São similares, embora nesse caso em que apenas uma letra muda entre as alternativas, a lista é
a melhor escolha. Em outro exemplo, o ou é útil também para casarmos um endereço de Internet,
que pode ser uma página, ou um sítio FTP http://|ftp://
4.7.3 Grupo
Assim como artistas famosos e personalidades que conseguem arrastar multidões, o grupo
tem o dom de juntar vários tipos de sujeitos em um mesmo local. Dentro de um grupo podemos
ter um ou mais caracteres, metacarateres e inclusive outros grupos. Como em uma expressão
matemática, os parênteses definem um grupo e seu conteúdo pode ser visto como um bloco na
expressão.
Todos os metacaracteres quantificadores que vimos anteriormente podem ter seu poder ampli-
ado pelo grupo, pois ele lhes dá mais abrangência. E o ’ou’, pelo contrário, tem sua abrangência
limitada pelo grupo, e pode parecer estranho, mas é essa limitação que lhe dá mais poder.
Em um exemplo simples,
(ai)+ agrupa a palavra ai e esse grupo está quantificado pelo mais (+). Isso quer dizer que
casamos várias repetições da palavra, como ai, aiai, aiaiai, ... E assim podemos agrupar tudo o
32
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
que quisermos, literais e metacaracteres, e quantificá-los:
(ha!)+ ha!, ha!ha!, ha!ha!ha!, ...
(.[0-9]){3} .0.6.2, .2.8.9, .6.6.6, ...
(www˙)?zz.com www.zz.com, zz.com
E em especial, nosso amigo ou ganha limites ou seu poder cresce:
boa-(tarde|noite) boa-tarde, boa-noite
#(|n.|núm) 6 # 6, n. 6, núm 6
(in|con)?certo incerto, concerto, certo
Podemos criar subgrupos também, então imagine que você esteja procurando o nome de um
supermercado em uma listagem e não sabe se este é um mercado, supermercado ou um hiper-
mercado.
(super|hiper)mercado
Consegue casar as duas últimas possibilidades, mas note que nas alternativas super e hiper
temos um trecho per comum aos dois, então podíamos "alternativizar"apenas as diferenças su e
hi:
(su|hi)permercado
Precisamos também casar apenas o mercado sem os aumentativos, então temos de agrupá-
los e torná-los opcionais:
((su|hi)per)?mercado
Ei! E se tivesse minimercado também?
(mini|(su|hi)per)?mercado
4.7.4 Retrovisor
(quero)- 1
Mas esse 1 não é o tal do escape?
Pois é, lembra que o escape () servia para tirar os poderes do metacaractere seguinte. En-
tão, a essa definição agora incluímos: a não ser que este próximo caractere seja um número de
1 a 9, então estamos lidando com um retrovisor.
Notou o detalhe? Podemos ter no máximo 9 retrovisores por ER, então 10 é o retrovisor nú-
mero 1 seguido de um zero.
O verdadeiro poder do retrovisor é quando não sabemos exatamente qual texto o grupo casará.
Vamos estender o quero do exemplo anterior para "qualquer palavra":
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html ([A-
33
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Za-z]+)-1
Viu o poder dessa ER? Ela casa palavras repetidas separadas por um traço, como o próprio
quero-quero, e mais: bate-bate, come-come, etc. Mas, e se tornássemos o traço opcional?
([A-Za-z]+)-?1
Com uma modificação pequena, fazemos um minicorretor ortográfico para procurar por palavras
repetidas como estas em um texto:
([A-Za-z]+) 1
Mas, lembre-se que procuramos por palavras inteiras e não apenas trechos delas, então pre-
cisamos usar as bordas para completar nossa ER:
b([A-Za-z]+) 1b
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html Como
já dito, podemos usar no máximo nove retrovisores. Vamos ver uns exemplos com mais de um
de nossos amigos novos:
• (lenta)(mente) é 2 1 lentamente é mente lenta
• ((band)eira)nte 1 2a bandeirante bandeira banda
• in(d)ol(or) é sem 1 2 indolor é sem dor
• ((((a)b)c)d)-1 = 1, 2, 3, 4 abcd-1 = abcd,abc,ab,a
Repare que numeram-se retrovisores contando os grupos da esquerda para a direita.
Ao usar um (grupo) qualquer, você ganha um brinde, e muitas vezes nem sabe. O brinde é o
trecho de texto casado pela ER que está no grupo, que fica guardado em um cantinho especial e
pode ser usado em outras partes da mesma ER.
Então, o retrovisor 1 é uma referência ao texto casado do primeiro grupo, nesse caso quero,
ficando, no fim das contas, a expressão que queríamos. O retrovisor pode ser lembrado também
como um link ou um ladrão, pois copia o texto do grupo.
Como o nome diz, é retrovisor porque ele "olha pra trás", para buscar um trecho já casado.
Isso é muito útil para casar trechos repetidos em uma mesma linha. Veja bem, é o texto, e não a
ER.
Como exemplo, em um texto, procuramos quero-quero. Podemos procurar literalmente por quero-
quero, mas assim não tem graça, vamos usar o grupo e o retrovisor para fazer isso.
34
Capítulo 5
Parte I
5.1 Diálogo
Diálogo entre um Linuxer e um empurrador de mouse:
- Quem é o Bash?
- O Bash é o filho mais novo da família Shell.
- Pô cara! Estás a fim de me deixar maluco? Eu tinha uma dúvida e você me deixa com duas! -
Não, maluco você já é há muito tempo. Desde que se decidiu a usar aquele sistema operacional
que você tem que dar dez boots por dia e não tem domínio nenhum sobre o que está acontecendo
no seu computador. Mas deixa isso prá lá, vou te explicar o que é Shell e os componentes de sua
família e ao final da explanação você dirá: "Meu Deus do Shell! Porque eu não optei pelo Linux
antes?".
5.2 O ambiente Linux
Para você entender o que é e como funciona o Shell, primeiro será mostrado como funciona
o ambiente em camadas do Linux. Dê uma olhada no gráfico abaixo:
35
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
.
Neste gráfico dá para ver que a camada de hardware é a mais profunda e é formada pelos com-
ponentes físicos do seu computador. Envolvendo esta, vem a camada do kernel que é o cerne do
Linux, seu núcleo, é quem coloca o hardware para funcionar fazendo seu gerenciamento e con-
trole. Os programas e comandos que envolvem o kernel, dele se utilizam para realizar as tarefas
aplicativas para que foram desenvolvidos. Fechando tudo isso vem o Shell que leva este nome
porque em inglês, Shell significa concha, carapaça, isto é, fica entre o usuário e o sistema opera-
cional, de forma que tudo que interage com o sistema operacional, tem que passar pelo seu crivo.
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html
5.3 O ambiente Shell
Bom já que para chegar ao núcleo do Linux, no seu kernel que é o que interessa a todo apli-
cativo, é necessária a filtragem do Shell, vamos entender como ele funciona de forma a tirar o
máximo proveito das inúmeras facilidades que ele nos oferece.
O Linux por definição é um sistema multiusuário - não podemos nunca esquecer disto - e para per-
mitir o acesso de determinados usuários e barrar a entrada de outros, existe um arquivo chamado
/etc/passwd que além de fornecer dados para esta função de "leão-de-chácara"do Linux, tam-
bém provê informações para o login daqueles que passaram por esta primeira barreira. O último
campo de seus registros informa ao sistema qual Shell a pessoa receberá ao se "logar"(ARGH!!!).
Lembra que foi falado de Shell, família, irmão? Pois é, vamos começar a entender isto: o Shell,
que se vale da imagem de uma concha envolvendo o sistema operacional propriamente dito, é o
nome genérico para tratar os filhos desta idéia que, ao longo dos anos de existência do sistema
operacional Unix foram aparecendo. Atualmente existem diversos sabores de Shell, dentre estes
é destacado o sh (Bourne Shell), o ksh (Korn Shell), bash (Bourne Again Shell) e o csh (C Shell).
5.4 Uma rápida passagem nos principais sabores de Shell
Bourne Shell (sh)
Desenvolvido por Stephen Bourne da Bell Labs (da AT&T onde também foi desenvolvido o Unix),
este foi durante muitos anos o Shell default do sistema operacional Unix. É também chamado de
Standard Shell por ter sido durante vários anos o único e até hoje é o mais utilizado até porque
ele foi portado para todos os ambientes Unix e distros Linux.
Korn Shell (ksh)
Desenvolvido por David Korn, também da Bell Labs, é um superset do sh, isto é, possui todas as
facilidades do sh e a elas agregou muitas outras. A compatibilidade total com o sh vem trazendo
muitos usuários e programadores de Shell para este ambiente.
Bourne Again Shell (bash)
Este é o Shell mais moderno e cujo número de adeptos mais cresce em todo o mundo, seja
por ser o Shell default do Linux, seu sistema operacional hospedeiro, seja por sua grande diver-
sidade de comandos que incorpora inclusive diversos instruções características do C Shell. C
36
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Shell (csh)
Desenvolvido por Bill Joy da Berkley University é o Shell mais utilizado em ambientes *BSD e
Xenix. A estruturação de seus comandos é bem similar à da linguagem C. Seu grande pecado foi
ignorar a compatibilidade com o sh, partindo por um caminho próprio.
Além destes Shells existem outros, mas, neste curso, será abordado somente sobre os três pri-
meiros tratando-os genericamente por Shell e assinalando as especificidades de cada um que
porventura hajam.
Atenção: Quando foi dito que o último campo do /etc/passwd informa ao sistema
qual é o Shell que o usuário receberá ao se "logar", é para ser interpretado ao
pé-da-letra, isto é, se neste campo do seu registro estiver prog, a pessoa ao
acessar o sistema receberá a tela de execução do programa prog e ao terminar
a sua execução ganhará imediatamente um logout. Imagine o quanto se pode
incrementar a segurança com este simples. artifício.
5.5 Explicando o funcionamento do Shell
O Shell é o primeiro programa que você ganha ao se "logar"no Linux. É ele que resolverá vá-
rias coisas de forma a não onerar o kernel com tarefas repetitivas, aliviando-o para tratar assuntos
mais nobres. Como cada usuário possui o seu próprio Shell interpondo-se entre ele e o Linux, é
o Shell quem interpreta os comandos que são teclados e examina as suas sintaxes, passando-os
esmiuçados para execução.
O Shell é um interpretador (ou será intérprete) que traz consigo uma poderosa linguagem com
comandos de alto nível, que permite construção de loops (laços), de tomadas de decisão e de
armazenamento de valores em variáveis, como será mostrado.
Será explicado as principais tarefas que o Shell cumpre, na sua ordem de execução. Preste aten-
ção nesta ordem porque ela é fundamental para o entendimento do resto do nosso bate papo.
Exame da Linha de Comandos
Neste exame, o Shell identifica os caracteres especiais (reservados) que têm significado para
interpretação da linha, logo após verifica se a linha passada é um comando ou uma atribuição.
Comando
Quando uma linha é digitada no prompt do Linux, ela é dividida em pedaços separados por es-
paço em branco: o primeiro pedaço é o nome do programa que terá sua existência pesquisada;
identifica em seguida, nesta ordem, opções/parâmetros, redirecionamentos e variáveis.
Quando o programa identificado existe, o Shell verifica as permissões dos arquivos envolvidos
(inclusive o próprio programa), dando um erro caso você não esteja credenciado a executar esta
tarefa.
Atribuição
Se o Shell encontra dois campos separados por um sinal de igual ()= sem espaços em branco
37
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
entre eles, identifica esta seqüência como uma atribuição.
Exemplos:
$ ls linux
linux
Neste exemplo, o Shell identificou o ls como um programa e o linux como um parâmetro pas-
sado para o programa ls.
$ valor=1000
Neste caso, por não haver espaços em branco (já dá para notar que o branco é um dos ca-
racteres reservados) o Shell identificou uma atribuição e colocou 1000 na variável valor.
Jamais Faça:
$ valor = 1000
bash: valor: not found
Neste caso, o Bash achou a palavra valor isolada por brancos e julgou que você estivesse man-
dando executar um programa chamado valor, para o qual estaria passando dois parâmetros: = e
1000.
Resolução de Redirecionamentos
Após identificar os componentes da linha que você teclou, o Shell parte para a resolução de
redirecionamentos. O Shell tem incorporado ao seu elenco de vantagens o que chamamos de
redirecionamento, que pode ser de entrada (stdin), de saída (stdout) ou dos erros (stderr), con-
forme será explicado a seguir.
Substituição de Variáveis
Neste ponto, o Shell verifica se as eventuais variáveis (parâmetros começados por $), encontra-
das no escopo do comando, estão definidas e as substitui por seus valores atuais.
Substituição de Meta Caracteres
Se algum metacaractere (*, ? ou []) foi encontrado na linha de comando, neste ponto ele
será substituído por seus possíveis valores. Supondo que o único arquivo no seu diretório cor-
rente começado pela letra n seja um diretório chamado "nomegrandeprachuchu", se você fizer:
$ cd n*
Passa Linha de Comando para o kernel
Completadas as tarefas anteriores, o Shell monta a linha de comandos, já com todas as subs-
tituições feitas, chama o kernel para executá-la em um novo Shell (Shell filho), ganhando um
número de processo (PID ou Process Identification) e permanece inativo durante a execução do
programa. Uma vez encerrado este processo (juntamente com o Shell filho), recebe novamente
o controle e, exibindo um prompt, mostra que está pronto para executar outros comandos.
38
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
5.6 Caracteres para remoção do significado
É isso mesmo, quando não se deseja que o Shell interprete um caractere especial, deve-se
"escondê-lo"dele. Isso pode ser feito de três formas distintas:
Apóstrofo ou plic (’)
Quando o Shell vê uma cadeia de caracteres entre apóstrofos ('), ele tira os apóstrofos da ca-
deia e não interpreta seu conteúdo.
$ ls linux*
linuxmagazine
$ ls ’linux*’
bash: linux* no such file or directory
No primeiro caso, o Shell "expandiu"o asterisco e descobriu o arquivo linuxmagazine para lis-
tar. No segundo, os apóstrofos inibiram a interpretação do Shell e veio a resposta que não existe
o arquivo linux*.
Contrabarra ou Barra Invertida ()
Idêntico aos apóstrofos exceto que a barra invertida inibe a interpretação somente do caractere
que a segue.
Suponha que você, acidentalmente, tenha criado um arquivo chamado * (asterisco) - que alguns
sabores de Unix permitem - e deseja removê-lo. Se você fizesse:
$ rm *
Estaria cometendo um grande erro, pois o rm removeria todos os arquivos do diretório corrente.
A melhor forma de fazer o pretendido é:
$ rm *
Desta forma, o Shell não interpretaria o asterisco e em conseqüência não faria a sua expan-
são.
Faça a seguinte experiência científica:
$ cd /etc
$ echo ’*’
$ echo *
$ echo *
Viu a diferença? Então, não precisa explicar mais.
Aspas (")
Exatamente igual ao apóstrofo exceto que, se a cadeia entre aspas contiver um cifrão ($), uma
crase (`), ou uma barra invertida (), estes caracteres serão interpretados pelo Shell.
Não precisa se preocupar, não foi dado exemplos do uso das aspas por que você ainda não co-
nhece o cifrão($) nem a crase (`). Daqui para frente veremos com muita constância o uso destes
39
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
caracteres especiais, o mais importante é entender o significado de cada um.
5.7 Caracteres de redirecionamento
5.7.1 Caracteres de redirecionamento
A maioria dos comandos tem uma entrada, uma saída e pode gerar erros. Esta entrada é
chamada Entrada Padrão ou stdin e seu default é o teclado do terminal. Analogamente, a saída
do comando é chamada Saída Padrão ou stdout e seu default é a tela do terminal. Para a tela
também são enviadas por default as mensagens de erro oriundas do comando que neste caso é
a chamada Saída de Erro Padrão ou stderr. Veremos agora, como alterar este estado de coisas.
Vamos fazer um programa gago. Para isto faça:
$ cat
O cat é uma instrução que lista o conteúdo do arquivo especificado para a Saída Padrão (st-
dout). Caso a entrada não seja definida, ele espera os dados da stdin. Como não foi especificada
a entrada, ele está esperando-a pelo teclado (Entrada Padrão) e como também não foi citada a
saída, o que será teclado irá para a tela (Saída Padrão) fazendo desta forma, um programa gago.
Experimente!
5.7.2 Redirecionamento da Saída Padrão
Para especificarmos a saída de um programa usamos o > (maior que) ou o » (maior, maior)
seguido do nome do arquivo para o qual se deseja mandar a saída. Vamos transformar o pro-
grama gago em um editor de textos.
$ cat > Arq
O cat continua sem ter a entrada especificada, portanto está aguardando que os dados sejam
teclados, porém a sua saída está sendo desviada para o arquivo Arq. Assim sendo, tudo que
esta sendo teclado esta indo para dentro de Arq, de forma que fizemos o editor de textos mais
curto e ruim do planeta.
Se fizermos, novamente:
$ cat > Arq
Os dados contidos em Arq serão perdidos, já que antes do redirecionamento o ShellArq estava
vazio. Para colocar mais informações no final do arquivo, deveriamos ter feito: criará um $
cat » Arq
Atenção: Como já haviamos lhe dito, o Shell resolve a linha e depois manda o
comando para a execução. Assim, se você redirecionar a saída de um arquivo
40
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
para ele próprio, primeiramente o Shell "esvazia"este arquivo e depois manda o
comando para execução, desta forma você acabou de perder o conteúdo do seu
arquivo. Com isso dá para notar que o » (maior maior) serve para inserir texto
no final do arquivo.
5.7.3 Redirecionamento da Saída de erro Padrão
Assim como o default do Shell é receber os dados do teclado e mandar as saídas para a
tela, os erros também serão enviados para a tela se você não especificar para onde deverão ser
enviados. Para redirecionar os erros use 2> SaidaDeErro. Note que entre o número 2 e o sinal de
maior (>) não existe espaço em branco. Atenção: Não confunda » com 2>. O primeiro anexa
dados ao final de um arquivo, e o segundo redireciona a Saída de Erro Padrão (stderr) para
um arquivo que está sendo designado. Isso é importante.
Suponha que durante a execução de um script você pode, ou não (dependendo do rumo to-
mado pela execução do programa), ter criado um arquivo chamado /tmp/seraqueexiste$$. Para
não ficar sujeira no seu disco, ao final do script você colocaria uma linha:
$ rm /tmp/seraqueexiste$ $ (dois cifrões juntos)
Caso o arquivo não existisse seria enviado para a tela uma mensagem de erro. Para que isso
não aconteça, deve-se fazer:
$ rm /tmp/seraqueexiste$ $ 2> /dev/null (dois cifrões juntos)
Sobre o exemplo visto, há duas dicas:
Dica 1:
O $ $ (dois cifrões juntos) contêm o PID, isto é, o número do seu processo. Como o Linux
é multiusuário, é bom anexar sempre o $ $ (dois cifrões juntos) ao nome dos
arquivos que serão usados por várias pessoas para não haver problema de propriedade,
isto é, caso você batizasse o seu arquivo simplesmente como seraqueexiste, o primeiro
que o usasse (criando-o então) seria o seu dono e todos os outros ganhariam um erro
quando tentassem gravar algo nele.
Para que você teste a Saída de Erro Padrão direto no prompt do seu Shell, vamos dar mais
um exemplo. Faça:
$ ls naoexiste
bash: naoexiste no such file or directory
$ ls naoexiste 2> arquivodeerros
$
hspace*1cmtextbf$ cat arquivodeerros
bash: naoexiste no such file or directory
Neste exemplo, vimos que quando fizemos um ls em naoexiste, ganhamos uma mensagem
de erro. Após, redirecionarmos a Saída de Erro Padrão para arquivodeerros e executarmos o
41
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
mesmo comando, recebemos somente o prompt na tela. Quando listamos o conteúdo do arquivo
para o qual foi redirecionada a Saída de Erro Padrão, vimos que a mensagem de erro tinha sido
armazenada nele. Faça este teste.
Dica 2:
- Quem é esse tal de /dev/null?
- Em Unix existe um arquivo fantasma. Chama-se /dev/null. Tudo que é mandado para
este arquivo some, assemelha-se a um Buraco Negro. No caso do exemplo, como não nos
interessava guardar a possível mensagem de erro oriunda do comando rm, redirecionamos-
a para este arquivo.
É interessante notar que estes caracteres de redirecionamento são cumulativos, isto é, se no
exemplo anterior fizéssemos:
$ ls naoexiste 2» arquivodeerros
a mensagem de erro oriunda do ls seria anexada ao final de arquivodeerros.
5.7.4 Redirecionamento da Entrada Padrão
Para fazermos o redirecionamento da Entrada Padrão, usamos o < (menor que).
- E para que serve isso? - você irá perguntar.
-Com esse exemplo você entenderá:
Suponha que você queira mandar um email para o seu chefe. Ao invés de sair redigindo o email
direto no prompt da tela de forma a tornar impossível a correção de uma frase anterior onde, sem
querer, escreveu um "nós vai", você edita um arquivo com o conteúdo da mensagem e após umas
quinze verificações sem constatar nenhum erro, decide enviá-lo e para tal, faz:
$ mail chefe < arquivocommailparaochefe
O seu chefe, então, receberá o conteúdo do arquivocommailparaochefe.
Um outro tipo de redirecionamento que o Shell te permite é o chamado here document. Ele é
representado por « (menor menor) e serve para indicar ao Shell que o escopo de um comando
começa na linha seguinte e termina quando encontra uma linha cujo conteúdo seja unicamente o
label que segue o sinal «.
Veja o fragmento de script a seguir, com uma rotina de ftp:
$ ftp -ivn hostremoto « fimftp
user $Usuário $Senha
binary
get arquivoremoto
fimftp
Aqui, temos muitos detalhes interessantes:
1. As opções que foram usadas para o ftp (-ivn) servem para ele ir listando tudo que está acon-
tecendo (-v de verbose), para não perguntar se você tem certeza de que deseja transmitir
42
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
cada arquivo (-i de interactive), e finalmente a opção -n serve para dizer ao ftp para ele
não solicitar o usuário e sua senha, pois esses serão informados pela instrução específica
(user).
2. Quando foi usado o « fimftp, estava dizendo o seguinte para o intérprete: "Shell, não faça
nada a partir daqui até encontrar o label fimftp. Você não entenderia nada, já que são
instruções específicas do comando ftp e você não entende nada de =ftp=".
Se fosse só isso seria simples, mas pelo próprio exemplo dá para ver que existem duas variáveis
($Usuário e $Senha), que o Shell resolverá antes do redirecionamento. Mas a grande vantagem
desse tipo de construção é que ela permite que comandos também sejam interpretados dentro
do escopo do here document, o que também contraria o que foi dito. Depois será explicado como
isso funciona. Agora não dá, pois está faltando ferramenta.
1. O comando user é do repertório de instruções do ftp e serve para passar o usuário e a senha
que haviam sido lidos em uma rotina anterior a esse fragmento de código e colocados,
respectivamente, nas duas variáveis: $Usuário e $Senha.
2. . O binary é outra instrução do ftp, que serve para indicar que a transferência de arquivore-
moto será feita em modo binário, isto é, o conteúdo do arquivo não será interpretado para
saber se está em ASCII, EBCDIC, ...
3. O get arquivoremoto diz ao ftp para pegar esse arquivo em hostremoto e trazê-lo para o
nosso host local. Se fosse para mandar o arquivo, usaríamos o comando put.
Atenção: Um erro muito freqüente no uso de labels (como o fimftp do exemplo anterior) é
causado pela presença de espaços em branco antes ou após o mesmo. Fique muito atento
quanto a isso, por que este tipo de erro cria problemas no programador, até que seja de-
tectado. Lembre-se: um label que se preze tem que ter uma linha inteira só para ele.
5.8 Redirecionamento de Comandos
Os redirecionamentos que falamos até aqui sempre se referiam a arquivos, isto é mandavam
para arquivo, recebiam de arquivo, simulavam arquivo local e etc. O que veremos a partir de
agora redireciona a saída de um comando para a entrada de outro, é muito utilizado e ajuda bas-
tante. Seu nome é pipe (que em inglês significa tubo, já que ele encana a saída de um comando
para a entrada de outro) e sua representação é uma barra vertical (|).
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html $
ls | wc -l
21
O comando ls passou a lista de arquivos para o comando wc, que quando está com a opção
-l conta a quantidade de linhas que recebeu. Desta forma, podemos afirmar categoricamente que
no diretório existiam 21 arquivos.
$ cat /etc/passwd |sort | lp
43
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Esta linha de comandos manda a listagem do arquivo /etc/passwd para a entrada do comando
sort. Este a classifica e manda-a para o lp que é o gerenciador do spool de impressão.
5.9 Caracteres de Ambiente
Normalmente, ao priorizar uma expressão você a coloca entre parênteses, por causa da arit-
mética é normal pensarmos desta forma. Mas em Shell o que prioriza mesmo são as crases (`)
e não os parênteses. Vamos dar exemplos de uso das crases para você entender melhor.
Eu quero saber quantos usuários estão "logados"no computador que eu administro. Eu posso
fazer:
$ who | wc -l
8
O comando who passa a lista de usuários conectados para o comando wc -l que conta quan-
tas linhas recebeu e lista a resposta na tela. Pois bem, mas ao invés de ter um oito solto na tela,
o que quero é que ele esteja no meio de uma frase.
Para mandar frases para a tela, uso o comando echo, ficando assim:
$ echo "Existem who | wc -l usuários conectados"
Existem who | wc -l usuários conectados
Não funcionou, e não foi por causa das aspas que eu coloquei, mas sim por que eu teria que
ter executado o who | wc -l antes do echo. Para resolver este problema, tenho que priorizar esta
segunda parte do comando com o uso de crases, fazendo assim:
$ echo "Existem ’who | wc -l’ usuários conectados"
Existem 8 usuários conectados
Para eliminar esse monte de brancos antes do 8 que o wc -l produziu, basta tirar as aspas. Assim:
$ echo Existem ’who | wc -l’ usuários conectados
Existem 8 usuários conectados
Como foi dito antes, as aspas protegem tudo que está dentro dos seus limites, da interpreta-
ção do Shell. Como para o Shell basta um espaço em branco como separador, os vários espaços
serão trocado por um único após a retirada das aspas.
Quando estiver no Shell, você deve sempre dar um comando em cada linha. Para agrupar co-
mandos em uma mesma linha, terá que separá-los por ponto-e-vírgula(;). Então:
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html $pwd
; cd /etc; pwd; cd -; pwd
/home/meudir
44
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
/etc/
/home/meudir
Neste exemplo, listamos o nome do diretório corrente com o comando pwd, mudamos para o
diretório /etc, novamente listamos o nome do diretório e, finalmente, voltamos para o diretório
onde estava anteriormente (cd -), listando seu nome. Repare que foi colocado o ponto-e-vírgula
(;) de todas as formas possíveis para mostrar que não importa se existem espaços em branco
antes ou após este caractere.
Finalmente, vamos ver o caso dos parênteses. Veja só o caso a seguir, bem parecido com o
exemplo anterior:
$ (pwd ; cd /etc ; pwd;)
/home/meudir
/etc/
$ pwd
/home/meudir
- Quequeiiisso minha gente? Eu estava no /home/meudir, mudei para o /etc, constatei que
estava neste diretório com o pwd seguinte, e quando o agrupamento de comandos terminou, eu
vi que continuava no /etc/meudir, como se eu nunca houvesse saído de lá!
- Ih! Será que tem coisa de mágico aí?
- Tá me estranhando, rapaz? Não é nada disso! O interessante do uso de parênteses é que
ele invoca um novo Shell para executar os comandos que estão no seu interior. Desta forma,
realmente fomos para o diretório /etc, porém quando todos os comandos dentro dos parênteses
foram executados, o novo Shell que estava no diretório /etcShell anterior cujo diretório corrente
era /home/meudir. Faça outros testes usando cd, e ls para você firmar o conceito.
Agora que já conhecemos estes conceitos veja só este exemplo:
$ mail suporte « FIM
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html >Ola
suporte, hoje as ’date"+%hh:mm"’
>ocorreu novamente aquele problema
>que eu havia reportado por
>telefone. Conforme seu pedido
>ai vai uma listagem dos arquivos
>do diretorio:
>’ls -l’
>Abracos a todos.
>FIM
Finalmente, agora, temos conhecimento para mostrar o que havíamos conversado sobre here
document. Os comandos entre crases (‘) serão priorizados e, portanto, o Shell os executará an-
tes da instrução mail. Quando o suporte receber o e-mail, verá que os comandos date e ls foram
executados imediatamente antes do comando mail, recebendo então uma fotografia do ambiente
no momento em que a correspondência foi enviada.
45
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
O prompt primário default do Shell, como vimos, é o cifrão ($), porém o Shell usa o conceito
de prompt secundário, ou de continuação de comando que é enviado para a tela quando há uma
quebra de linha e a instrução não terminou. Esse prompt, é representado por um sinal de maior
(>), que vemos precedendo a partir da 2ª linha do exemplo.
Para finalizar e bagunçar tudo, devo dizer que existe uma construção mais moderna que vem
sendo utilizada como forma de priorização de execução de comandos, tal qual as crases (‘). São
as construções do tipo $(cmd), onde cmd é um (ou vários) comando que será(ão) executado(s)
com prioridade em seu contexto.
Assim sendo, o uso de crases (‘) ou construções do tipo $(cmd) servem para o mesmo fim, po-
rém para quem trabalha com sistemas operacionais de diversos fornecedores (multiplataforma),
aconselho o uso das crases já que o $(cmd) não foi portado para todos os sabores de Shell. Aqui
dentro do Botequim, usarei ambas as formas, indistintamente.
Vejamos novamente o exemplo dado para as crases sob esta nova ótica:
$ echo Existem $(who | grep wc -l) usuários conectados
Existem 8 usuários conectados
Veja só este caso:
$ Arqs=ls
$ echo $Arqs
ls
Neste exemplo, eu fiz uma atribuição (=) e executei uma instrução. O que eu queria era que a
variável $Arqs, recebesse a saída do comando ls. Como as instruções de um script são interpre-
tadas de cima para baixo e da esquerda para a direita, a atribuição foi feita antes da execução
do ls. Para fazer o que desejamos é necessário que eu priorize a execução deste comando em
detrimento da atribuição e isto pode ser feito de qualquer uma das maneiras a seguir:
$ Arqs=’ls’
ou:
$ Arqs=$(ls)
Para encerrar este assunto, vamos ver só mais um exemplo. Digamos que eu queira colocar
dentro da variável $Arqs a listagem longa (ls -l) de todos os arquivos começados por arq e segui-
dos de um único caractere (?). Eu deveria fazer:
$ Arqs=$(ls -l arq?)
ou:
$ Arqs=’ls -l arq?’
Mas veja:
46
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
$ echo $Arqs
-rw-r–r–
1 jneves jneves 19 May 24 19:41 arq1 -rw-r–r– 1 jneves jneves 23 May
24 19:43 arq2 -rw-r–r– 1 jneves jneves 1866 Jan 22 2003 arql
- Pô, saiu tudo embolado!
- Pois é cara, como eu já te disse, se você deixar o Shell "ver"os espaços em branco, sempre
que houver diversos espaços juntos, eles serão trocados por apenas um. Para que a listagem
saia bonitinha, é necessário proteger a variável da interpretação do Shell, assim:
$ echo "$Arqs"
-rw-r–r– 1 jneves jneves 19 May 24 19:41 arq1
-rw-r–r– 1 jneves jneves 23 May 24 19:43 arq2
-rw-r–r– 1 jneves jneves 1866 Jan 22 2003 arql
- Olhe, amigo, vá treinando esses exemplos, porque, quando nos encontrarmos novamente, vou
lhe explicar uma série de instruções típicas de programação Shell. Tchau! Ahh! Só mais uma
coisinha que eu ia esquecendo de lhe dizer. Em Shell, o "jogo da velha"(#) é usado quando de-
sejamos fazer um comentário.
$ exit # pede a conta ao garcon
47
Capítulo 6
Parte II
6.1 Diálogo
- Garçom! Traz um "chops"e dois "pastel". O meu amigo hoje não vai beber por que ele final-
mente esta sendo apresentado a um verdadeiro sistema operacional e ainda tem muita coisa a
aprender! - E então, amigo, tá entendendo tudo que te expliquei até agora? - Entendendo eu tô,
mas não vi nada prático nisso... - Calma rapaz, o que te falei até agora, serve como base ao que
há de vir daqui pra frente. Vamos usar estas ferramentas que vimos para montar programas es-
truturados, que o Shell permite. Você verá porque até na TV já teve programa chamado "O Shell
é o Limite". - Para começar vamos falar dos comandos da família grep. - grep? Não conheço
nenhum termo em inglês com este nome... - É claro, grep é um acrônimo Global Regular Expres-
sion Print, que usa expressões regulares para pesquisar a ocorrência de cadeias de caracteres
na entrada definida (se bem que há uma lenda sobre como este comando foi nomeado: no editor
de textos "ed", o avô do "vim", o comando usado para buscas era g/_expressao regular_/p, ou no
inglês g/_re_/p.). Por falar em expressões regulares (ou regexp), o Aurélio Marinho Jargas tem
todas as dicas em sua página (inclusive tutorias) que abordam o tema. Se você está mesmo a
fim de aprender a programar em Shell, Perl, Python, ... Acho bom você ler estes artigos para te
ajudar no que está para vir.
Pergunta: O grep é um aplicativo para linha de comando que faz buscas no conteúdo dos arqui-
vos. Aceita expressões regulares e ao utilizá-las no grep é recomendado utilizar escapes "¨para
caracteres como "*"para que o bash não o entenda como um curinga para nomes de arquivos. A
definição dada está correta?
6.2 Eu fico com o grep, você com a gripe
Esse negócio de gripe é brincadeira! É só um pretexto para pedir umas caipirinhas. Mas
voltando à vaca fria, eu te falei que o grep procura cadeia de caracteres dentro de uma entrada
definida, mas o que vem a ser uma "entrada definida"? Bem, existem várias formas de definir a
entrada do comando grep. Vejamos: Pesquisando em um arquivo:
$ grep rafael /etc/passwd
Pesquisando em vários arquivos:
$ grep grep *.sh
48
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Pesquisando na saída de comando:
$ who | grep Pelegrino
No 1º exemplo, o mais simples, procurei a palavra rafael em qualquer lugar do arquivo /etc/passwd.
Se quisesse procurá-la como um login name, isto é, somente no início dos registros deste arquivo,
eu deveria fazer:
$ grep '^rafael’ /etc/passwd
E para que serve este circunflexo e os apóstrofos? O circunflexo (^), se você tivesse lido os
artigos anteriores sobre expressões regulares que te falei, saberia que servem para limitar a
pesquisa ao início de cada linha, e os apóstrofos (’) servem para o Shell não interpretar este
circunflexo, deixando-o passar incólume para o comando grep.
O grep aceita como entrada, a saída de outro comando redirecionado por um pipe (isto é muito
comum em Shell e é um tremendo acelerador de execução de comando já que atua como se
a saída de um programa fosse guardada em disco e o segundo programa lesse este arquivo
gerado), desta forma, no 3º exemplo, o comando who listou as pessoas "logadas"na mesma má-
quina que você (não se esqueça jamais: o Linux é multiusuário) e o grep foi usado para verificar
se o Pelegrino estava trabalhando ou "coçando".
6.3 A família grep
Este comando grep é muito conhecido, pois é usado com muita freqüência, o que muitas
pessoas desconhecem é que existem três comandos na família grep, que são:
• grep;
• egrep;
• fgrep.
A principais características diferenciais entre os 3 são:
• O grep pode ou não usar expressões regulares simples, porém no caso de não usá-las, o
fgrep é melhor, por ser mais rápido;
• O egrep ("e"de extended, extendido) é muito poderoso no uso de expressões regulares. Por
ser o mais lento da família, só deve ser usado quando for necessária a elaboração de uma
expressão regular não aceita pelo grep;
• O fgrep ("f"de fast, rápido, ou de "file", arquivo) como o nome diz é o rapidinho da família,
executa o serviço de forma muito veloz (por vezes é cerca de 30% mais veloz que o grep e
50% mais que o egrep), porém não permite o uso de expressões regulares na pesquisa.
Atenção: Tudo que foi dito acima sobre velocidade, só se aplica à família de comandos
grep do Unix. No Linux o grep é sempre mais veloz, já que os outros dois (fgrep e egrep)
são scripts em Shell que chamam o primeiro.
49
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Agora que você já conhece as diferenças entre os membros da família, me diga: o que você
acha dos três exemplos que eu dei antes das explicações?
- Eu achei que o fgrep resolveria o teu problema de forma mais veloz do que o grep.
- Perfeito! Tô vendo que você está atento! Está entendendo tudo que estou te explicando! Então
vamos ver mais exemplos para clarear de vez as diferenças de uso dos membros da família.
6.4 Exemplos da família grep
Exemplos
http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html Eu sei
que em um arquivo existe um texto falando sobre Linux só não tenho certeza se está escrito com
L maiúsculo ou l minúsculo. Posso fazer de duas formas:
$ egrep (Linux | linux) arquivo.txt
ou
$ grep [Ll]inux arquivo.txt
No primeiro caso, a expressão regular complexa "(Linux | linux)"usa os parênteses para agru-
par as opções e a barra vertical (|) como um "ou"lógico, isto é, estou procurando Linux ou linux.
No segundo, a expressão regular [Ll]inux significa: começado por L ou l seguido de inux. Por
esta expressão ser mais simples, o grep consegue resolvê-la, portanto acho melhor usar a se-
gunda forma, já que o egrep tornaria a pesquisa mais lenta.
Outro exemplo. Para listar todos os subdiretórios do diretório corrente, basta:
$ ls -l | grep '^d’
drwxr-xr-x 3 root root 4096 Dec 18 2000 doc
drwxr-xr-x 11 root root 4096 Jul 13 18:58 freeciv
drwxr-xr-x 3 root root 4096 Oct 17 2000 gimp
drwxr-xr-x 3 root root 4096 Aug 8 2000 gnome
drwxr-xr-x 2 root root 4096 Aug 8 2000 idl
drwxrwxr-x 14 root root 4096 Jul 13 18:58 locale
drwxrwxr-x 12 root root 4096 Jan 14 2000 lyx
drwxrwxr-x 3 root root 4096 Jan 17 2000 pixmaps
drwxr-xr-x 3 root root 4096 Jul 2 20:30 scribus
drwxrwxr-x 3 root root 4096 Jan 17 2000 sounds
drwxr-xr-x 3 root root 4096 Dec 18 2000 xine
No exemplo que acabamos de ver, o circunflexo (^) serviu para limitar a pesquisa à primeira
posição da saída do ls longo. Os apóstrofos foram colocados para o Shell não "ver"o circunflexo
(^).
50
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Vamos ver mais um. Sabemos que as quatro primeiras posições possíveis de um ls -l de um
arquivo comum (arquivo comum! Não é diretório, nem link, nem...) devem ser:
.
Assim sendo, para descobrir todos os arquivos executáveis em um determinado diretório eu de-
veria fazer:
$ ls -la | egrep '^-..(x|s)’
-rwxr-xr-x 1 root root 2875 Jun 18 19:38 rc
-rwxr-xr-x 1 root root 857 Aug 9 22:03 rc.local
-rwxr-xr-x 1 root root 18453 Jul 6 17:28 rc.sysinit
Onde novamente usamos o circunflexo (^) para limitar a pesquisa ao início de cada linha, então
as linhas listadas serão as que começam por um traço (-), seguido de qualquer coisa (o ponto
quando usado como uma expressão regular significa qualquer coisa), novamente seguido de
qualquer coisa, vindo a seguir um x ou um s.
Obteríamos o mesmo resultado se fizéssemos:
$ ls -la | grep '^-..[xs]'
e agilizaríamos a pesquisa.
6.5 Vamos montar uma cdteca
Vamos começar a desenvolver programas, acho que a montagem de um banco de dados de
músicas é bacana para efeito didático (e útil nesses tempos de downloads de mp3 e "queima-
dores"de CDs). Não se esqueça que, da mesma forma que vamos desenvolver um monte de
programas para organizar os seus CDs de música, com pequenas adaptações, você pode fazer
o mesmo com os CDs de software que vêm com a Linux Magazine e outros que você compra ou
queima, disponibilizando este banco de software, desta forma ganhando muitos pontos com seu
chefe. Para todos que trabalham com você (o Linux é multiusuário, e como tal deve ser explo-
rado).
- Espera! De onde eu vou receber os dados dos CDs?
- Inicialmente, vou lhe mostrar como o seu programa pode receber parâmetros de quem o estiver
executando e em breve, ensinarei a ler os dados pela tela ou de um arquivo.
6.6 Passando parâmetros
O layout do arquivo músicas será o seguinte:
51
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
nome do álbum^intérprete1~nome da música1:..:intérprete~nome da música
isto é, o nome do álbum será separado por um circunflexo (^) do resto do registro, que é formado
por diversos grupos compostos pelo intérprete de cada música do CD e a respectiva música in-
terpretada. Estes grupos são separados entre si por dois-pontos (:) e internamente, o intérprete
será separado por um til (~) do nome da música.
Eu quero escrever um programa que chamado musinc, incluirá registros no meu arquivo musicas.
Eu passarei o conteúdo de cada álbum como parâmetro na chamada do programa fazendo assim:
$ musinc "álbum^interprete~musica:interprete~musica:..."
Desta forma o programa musinc estará recebendo os dados de cada álbum como se fosse uma
variável. A única diferença entre um parâmetro recebido e uma variável é que os primeiros re-
cebem nomes numéricos (nome numérico fica muito esquisito, né? O que quis dizer é que seus
nomes são formados por um e somente um algarismo), isto é $1, $2, $3, ..., $9. Vamos, antes de
tudo, fazer um teste:
Exemplos
$ cat teste
#!/bin/bash
# Programa para testar passagem de parametros
echo "1o. parm -> $1"
echo "2o. parm -> $2"
echo "3o. parm -> $3"
Vamos executá-lo:
$ teste passando parametros para testar
bash: teste: cannot execute
Ops! Esqueci-me de torná-lo executável. Vou fazê-lo de forma a permitir que todos possam
executá-lo e em seguida vou testá-lo:
$ chmod 755 teste
$ teste passando parametros para testar
1o. parm -> passando
2o. parm -> parametros
3o. parm -> para
Repare que a palavra testar, que seria o quarto parâmetro, não foi listada. Isto deu-se justa-
mente porque o programa teste só listava os três primeiros parâmetros. Vamos executá-lo de
outra forma:
$ teste "passando parametros"para testar
1o. parm -> passando parametros
52
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script
Shell script

Mais conteúdo relacionado

Mais procurados

Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotproject
Tiago
 
Zope
ZopeZope
Drivers de Dispositivos Linux
Drivers de Dispositivos LinuxDrivers de Dispositivos Linux
Drivers de Dispositivos Linux
Hudson Augusto
 
Tunelamento
TunelamentoTunelamento
Tunelamento
Tiago
 
Wx python
Wx pythonWx python
Wx python
Tiago
 
Samba
SambaSamba
Samba
Tiago
 
X dialog
X dialogX dialog
X dialog
Tiago
 
Squid guard
Squid guardSquid guard
Squid guard
Tiago
 
Screen
ScreenScreen
Screen
Tiago
 
Javascript
JavascriptJavascript
Javascript
Tiago
 
Selinux
SelinuxSelinux
Selinux
Tiago
 
Horde
HordeHorde
Horde
Tiago
 
Xdmcp
XdmcpXdmcp
Xdmcp
Tiago
 
Tcl tk
Tcl tkTcl tk
Tcl tk
Tiago
 
Python gtk
Python gtkPython gtk
Python gtk
Tiago
 
Servidor de emails_seguro
Servidor de emails_seguroServidor de emails_seguro
Servidor de emails_seguro
Tiago
 
Jspservlets
JspservletsJspservlets
Jspservlets
Hudson Augusto
 
Jdbc
JdbcJdbc
Jdbc
Tiago
 
Java Basico
Java BasicoJava Basico
Java Basico
Hudson Augusto
 
OpenSolaris
OpenSolarisOpenSolaris
OpenSolaris
Hudson Augusto
 

Mais procurados (20)

Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotproject
 
Zope
ZopeZope
Zope
 
Drivers de Dispositivos Linux
Drivers de Dispositivos LinuxDrivers de Dispositivos Linux
Drivers de Dispositivos Linux
 
Tunelamento
TunelamentoTunelamento
Tunelamento
 
Wx python
Wx pythonWx python
Wx python
 
Samba
SambaSamba
Samba
 
X dialog
X dialogX dialog
X dialog
 
Squid guard
Squid guardSquid guard
Squid guard
 
Screen
ScreenScreen
Screen
 
Javascript
JavascriptJavascript
Javascript
 
Selinux
SelinuxSelinux
Selinux
 
Horde
HordeHorde
Horde
 
Xdmcp
XdmcpXdmcp
Xdmcp
 
Tcl tk
Tcl tkTcl tk
Tcl tk
 
Python gtk
Python gtkPython gtk
Python gtk
 
Servidor de emails_seguro
Servidor de emails_seguroServidor de emails_seguro
Servidor de emails_seguro
 
Jspservlets
JspservletsJspservlets
Jspservlets
 
Jdbc
JdbcJdbc
Jdbc
 
Java Basico
Java BasicoJava Basico
Java Basico
 
OpenSolaris
OpenSolarisOpenSolaris
OpenSolaris
 

Destaque

Shell Script Linux
Shell Script LinuxShell Script Linux
Shell Script Linux
Wellington Oliveira
 
Linux fundamental - Chap 14 shell script
Linux fundamental - Chap 14 shell scriptLinux fundamental - Chap 14 shell script
Linux fundamental - Chap 14 shell script
Kenny (netman)
 
Bash Shell Scripting
Bash Shell ScriptingBash Shell Scripting
Bash Shell Scripting
Raghu nath
 
Linux shell scripting tutorial
Linux shell scripting tutorialLinux shell scripting tutorial
Linux shell scripting tutorial
samsami1971
 
Shell Scripting
Shell ScriptingShell Scripting
Shell Scripting
Gaurav Shinde
 
Intro to Linux Shell Scripting
Intro to Linux Shell ScriptingIntro to Linux Shell Scripting
Intro to Linux Shell Scripting
vceder
 
Introduction To Apache Mesos
Introduction To Apache MesosIntroduction To Apache Mesos
Introduction To Apache Mesos
Timothy St. Clair
 
Unix Shell Scripting Basics
Unix Shell Scripting BasicsUnix Shell Scripting Basics
Unix Shell Scripting Basics
Dr.Ravi
 
Bash shell scripting
Bash shell scriptingBash shell scripting
Bash shell scripting
VIKAS TIWARI
 
Shell Scripting in Linux
Shell Scripting in LinuxShell Scripting in Linux
Shell Scripting in Linux
Anu Chaudhry
 
Complete Guide for Linux shell programming
Complete Guide for Linux shell programmingComplete Guide for Linux shell programming
Complete Guide for Linux shell programming
sudhir singh yadav
 
Building and Deploying Application to Apache Mesos
Building and Deploying Application to Apache MesosBuilding and Deploying Application to Apache Mesos
Building and Deploying Application to Apache Mesos
Joe Stein
 
Introduction to Apache Mesos
Introduction to Apache MesosIntroduction to Apache Mesos
Introduction to Apache Mesos
Joe Stein
 
Unix/Linux Basic Commands and Shell Script
Unix/Linux Basic Commands and Shell ScriptUnix/Linux Basic Commands and Shell Script
Unix/Linux Basic Commands and Shell Script
sbmguys
 
Introduction to Apache Mesos
Introduction to Apache MesosIntroduction to Apache Mesos
Introduction to Apache Mesos
tomasbart
 
Mesos: The Operating System for your Datacenter
Mesos: The Operating System for your DatacenterMesos: The Operating System for your Datacenter
Mesos: The Operating System for your Datacenter
David Greenberg
 
Apache Mesos: a simple explanation of basics
Apache Mesos: a simple explanation of basicsApache Mesos: a simple explanation of basics
Apache Mesos: a simple explanation of basics
Gladson Manuel
 

Destaque (17)

Shell Script Linux
Shell Script LinuxShell Script Linux
Shell Script Linux
 
Linux fundamental - Chap 14 shell script
Linux fundamental - Chap 14 shell scriptLinux fundamental - Chap 14 shell script
Linux fundamental - Chap 14 shell script
 
Bash Shell Scripting
Bash Shell ScriptingBash Shell Scripting
Bash Shell Scripting
 
Linux shell scripting tutorial
Linux shell scripting tutorialLinux shell scripting tutorial
Linux shell scripting tutorial
 
Shell Scripting
Shell ScriptingShell Scripting
Shell Scripting
 
Intro to Linux Shell Scripting
Intro to Linux Shell ScriptingIntro to Linux Shell Scripting
Intro to Linux Shell Scripting
 
Introduction To Apache Mesos
Introduction To Apache MesosIntroduction To Apache Mesos
Introduction To Apache Mesos
 
Unix Shell Scripting Basics
Unix Shell Scripting BasicsUnix Shell Scripting Basics
Unix Shell Scripting Basics
 
Bash shell scripting
Bash shell scriptingBash shell scripting
Bash shell scripting
 
Shell Scripting in Linux
Shell Scripting in LinuxShell Scripting in Linux
Shell Scripting in Linux
 
Complete Guide for Linux shell programming
Complete Guide for Linux shell programmingComplete Guide for Linux shell programming
Complete Guide for Linux shell programming
 
Building and Deploying Application to Apache Mesos
Building and Deploying Application to Apache MesosBuilding and Deploying Application to Apache Mesos
Building and Deploying Application to Apache Mesos
 
Introduction to Apache Mesos
Introduction to Apache MesosIntroduction to Apache Mesos
Introduction to Apache Mesos
 
Unix/Linux Basic Commands and Shell Script
Unix/Linux Basic Commands and Shell ScriptUnix/Linux Basic Commands and Shell Script
Unix/Linux Basic Commands and Shell Script
 
Introduction to Apache Mesos
Introduction to Apache MesosIntroduction to Apache Mesos
Introduction to Apache Mesos
 
Mesos: The Operating System for your Datacenter
Mesos: The Operating System for your DatacenterMesos: The Operating System for your Datacenter
Mesos: The Operating System for your Datacenter
 
Apache Mesos: a simple explanation of basics
Apache Mesos: a simple explanation of basicsApache Mesos: a simple explanation of basics
Apache Mesos: a simple explanation of basics
 

Semelhante a Shell script

Php
PhpPhp
Php
Tiago
 
Linux basico
Linux basicoLinux basico
Linux basico
Tiago
 
Tutorial ruby
Tutorial rubyTutorial ruby
Tutorial ruby
Joelisson Laurido
 
Apostila c# iniciantes
Apostila c# iniciantesApostila c# iniciantes
Apostila c# iniciantes
Caique Moretto
 
Handbook de ti para concursos
Handbook de ti para concursosHandbook de ti para concursos
Handbook de ti para concursos
alalves31
 
Apostila de PIC
Apostila de PICApostila de PIC
Apostila de PIC
luizgraf
 
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digitalNcl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
Rafael Carvalho
 
Manual do Kile
Manual do KileManual do Kile
Manual do Kile
Adelmo Henrique Santana
 
apostila sistmas digitais
apostila sistmas digitaisapostila sistmas digitais
apostila sistmas digitais
DeisisneCristina
 
Perl
PerlPerl
Perl
Tiago
 
K19 k01-logica-de-programacao-em-java
K19 k01-logica-de-programacao-em-javaK19 k01-logica-de-programacao-em-java
K19 k01-logica-de-programacao-em-java
André Bellarmino
 
Apostila linux francisco-araruna
Apostila linux francisco-ararunaApostila linux francisco-araruna
Apostila linux francisco-araruna
Wilkerson Santos
 
Arquitetura computadores
Arquitetura computadoresArquitetura computadores
Arquitetura computadores
Alberto de Oliveira
 
Fortran_95_curso_basico_Editora_XXX.pdf
Fortran_95_curso_basico_Editora_XXX.pdfFortran_95_curso_basico_Editora_XXX.pdf
Fortran_95_curso_basico_Editora_XXX.pdf
MarcosSilva130534
 
Cake php cookbook
Cake php cookbookCake php cookbook
Cake php cookbook
Jaqueline Costa
 
Apostila JSF 2.0 - K19
Apostila JSF 2.0 - K19Apostila JSF 2.0 - K19
Apostila JSF 2.0 - K19
K19 Treinamentos
 
Controle
ControleControle
Ebook controle classico
Ebook controle classicoEbook controle classico
Ebook controle classico
Monica Gonçalves
 
Python
PythonPython
Python
Tiago
 
Guia Rápido Da Linguagem Pascal
Guia Rápido Da Linguagem PascalGuia Rápido Da Linguagem Pascal
Guia Rápido Da Linguagem Pascal
MikeNandes
 

Semelhante a Shell script (20)

Php
PhpPhp
Php
 
Linux basico
Linux basicoLinux basico
Linux basico
 
Tutorial ruby
Tutorial rubyTutorial ruby
Tutorial ruby
 
Apostila c# iniciantes
Apostila c# iniciantesApostila c# iniciantes
Apostila c# iniciantes
 
Handbook de ti para concursos
Handbook de ti para concursosHandbook de ti para concursos
Handbook de ti para concursos
 
Apostila de PIC
Apostila de PICApostila de PIC
Apostila de PIC
 
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digitalNcl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
 
Manual do Kile
Manual do KileManual do Kile
Manual do Kile
 
apostila sistmas digitais
apostila sistmas digitaisapostila sistmas digitais
apostila sistmas digitais
 
Perl
PerlPerl
Perl
 
K19 k01-logica-de-programacao-em-java
K19 k01-logica-de-programacao-em-javaK19 k01-logica-de-programacao-em-java
K19 k01-logica-de-programacao-em-java
 
Apostila linux francisco-araruna
Apostila linux francisco-ararunaApostila linux francisco-araruna
Apostila linux francisco-araruna
 
Arquitetura computadores
Arquitetura computadoresArquitetura computadores
Arquitetura computadores
 
Fortran_95_curso_basico_Editora_XXX.pdf
Fortran_95_curso_basico_Editora_XXX.pdfFortran_95_curso_basico_Editora_XXX.pdf
Fortran_95_curso_basico_Editora_XXX.pdf
 
Cake php cookbook
Cake php cookbookCake php cookbook
Cake php cookbook
 
Apostila JSF 2.0 - K19
Apostila JSF 2.0 - K19Apostila JSF 2.0 - K19
Apostila JSF 2.0 - K19
 
Controle
ControleControle
Controle
 
Ebook controle classico
Ebook controle classicoEbook controle classico
Ebook controle classico
 
Python
PythonPython
Python
 
Guia Rápido Da Linguagem Pascal
Guia Rápido Da Linguagem PascalGuia Rápido Da Linguagem Pascal
Guia Rápido Da Linguagem Pascal
 

Mais de Tiago

Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodle
Tiago
 
6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal
Tiago
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascal
Tiago
 
Python bge
Python bgePython bge
Python bge
Tiago
 
Curso python
Curso pythonCurso python
Curso python
Tiago
 
Curso python
Curso pythonCurso python
Curso python
Tiago
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
Tiago
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharp
Tiago
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharp
Tiago
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharp
Tiago
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharp
Tiago
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharp
Tiago
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantes
Tiago
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharp
Tiago
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivos
Tiago
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafael
Tiago
 
Curso de shell
Curso de shellCurso de shell
Curso de shell
Tiago
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharp
Tiago
 
Classes csharp
Classes csharpClasses csharp
Classes csharp
Tiago
 
C# o basico
C#   o basicoC#   o basico
C# o basico
Tiago
 

Mais de Tiago (20)

Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodle
 
6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascal
 
Python bge
Python bgePython bge
Python bge
 
Curso python
Curso pythonCurso python
Curso python
 
Curso python
Curso pythonCurso python
Curso python
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharp
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharp
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharp
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharp
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharp
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantes
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharp
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivos
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafael
 
Curso de shell
Curso de shellCurso de shell
Curso de shell
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharp
 
Classes csharp
Classes csharpClasses csharp
Classes csharp
 
C# o basico
C#   o basicoC#   o basico
C# o basico
 

Último

PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptxPP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
LuizHenriquedeAlmeid6
 
Redação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptxRedação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptx
DECIOMAURINARAMOS
 
Introdução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escolaIntrodução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escola
Professor Belinaso
 
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
MessiasMarianoG
 
Fernão Lopes. pptx
Fernão Lopes.                       pptxFernão Lopes.                       pptx
Fernão Lopes. pptx
TomasSousa7
 
D20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua PortuguesaD20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua Portuguesa
eaiprofpolly
 
Atividade letra da música - Espalhe Amor, Anavitória.
Atividade letra da música - Espalhe  Amor, Anavitória.Atividade letra da música - Espalhe  Amor, Anavitória.
Atividade letra da música - Espalhe Amor, Anavitória.
Mary Alvarenga
 
Atividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º anoAtividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º ano
fernandacosta37763
 
Potenciação e Radiciação de Números Racionais
Potenciação e Radiciação de Números RacionaisPotenciação e Radiciação de Números Racionais
Potenciação e Radiciação de Números Racionais
wagnermorais28
 
UFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdfUFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdf
Manuais Formação
 
Slides Lição 11, Central Gospel, Os Mortos Em CRISTO, 2Tr24.pptx
Slides Lição 11, Central Gospel, Os Mortos Em CRISTO, 2Tr24.pptxSlides Lição 11, Central Gospel, Os Mortos Em CRISTO, 2Tr24.pptx
Slides Lição 11, Central Gospel, Os Mortos Em CRISTO, 2Tr24.pptx
LuizHenriquedeAlmeid6
 
epidemias endemia-pandemia-e-epidemia (1).ppt
epidemias endemia-pandemia-e-epidemia (1).pptepidemias endemia-pandemia-e-epidemia (1).ppt
epidemias endemia-pandemia-e-epidemia (1).ppt
MarceloMonteiro213738
 
Aula 1 do livro de Ciências do aluno - sons
Aula 1 do livro de Ciências do aluno - sonsAula 1 do livro de Ciências do aluno - sons
Aula 1 do livro de Ciências do aluno - sons
Érika Rufo
 
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
edivirgesribeiro1
 
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptxAVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AntonioVieira539017
 
livro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdflivro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdf
cmeioctaciliabetesch
 
OS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdfOS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdf
AmiltonAparecido1
 
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Biblioteca UCS
 
GÊNERO TEXTUAL - POEMA.pptx
GÊNERO      TEXTUAL     -     POEMA.pptxGÊNERO      TEXTUAL     -     POEMA.pptx
GÊNERO TEXTUAL - POEMA.pptx
Marlene Cunhada
 
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxSlides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
LuizHenriquedeAlmeid6
 

Último (20)

PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptxPP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
 
Redação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptxRedação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptx
 
Introdução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escolaIntrodução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escola
 
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
 
Fernão Lopes. pptx
Fernão Lopes.                       pptxFernão Lopes.                       pptx
Fernão Lopes. pptx
 
D20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua PortuguesaD20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua Portuguesa
 
Atividade letra da música - Espalhe Amor, Anavitória.
Atividade letra da música - Espalhe  Amor, Anavitória.Atividade letra da música - Espalhe  Amor, Anavitória.
Atividade letra da música - Espalhe Amor, Anavitória.
 
Atividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º anoAtividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º ano
 
Potenciação e Radiciação de Números Racionais
Potenciação e Radiciação de Números RacionaisPotenciação e Radiciação de Números Racionais
Potenciação e Radiciação de Números Racionais
 
UFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdfUFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdf
 
Slides Lição 11, Central Gospel, Os Mortos Em CRISTO, 2Tr24.pptx
Slides Lição 11, Central Gospel, Os Mortos Em CRISTO, 2Tr24.pptxSlides Lição 11, Central Gospel, Os Mortos Em CRISTO, 2Tr24.pptx
Slides Lição 11, Central Gospel, Os Mortos Em CRISTO, 2Tr24.pptx
 
epidemias endemia-pandemia-e-epidemia (1).ppt
epidemias endemia-pandemia-e-epidemia (1).pptepidemias endemia-pandemia-e-epidemia (1).ppt
epidemias endemia-pandemia-e-epidemia (1).ppt
 
Aula 1 do livro de Ciências do aluno - sons
Aula 1 do livro de Ciências do aluno - sonsAula 1 do livro de Ciências do aluno - sons
Aula 1 do livro de Ciências do aluno - sons
 
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
 
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptxAVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
 
livro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdflivro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdf
 
OS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdfOS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdf
 
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
Sistema de Bibliotecas UCS - Chronica do emperador Clarimundo, donde os reis ...
 
GÊNERO TEXTUAL - POEMA.pptx
GÊNERO      TEXTUAL     -     POEMA.pptxGÊNERO      TEXTUAL     -     POEMA.pptx
GÊNERO TEXTUAL - POEMA.pptx
 
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxSlides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
 

Shell script

  • 2. Sumário I Sobre essa Apostila 4 II Informações Básicas 6 III GNU Free Documentation License 11 IV Shell Script 20 1 O que é Shell Script 21 2 Plano de ensino 22 2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.6 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.7 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.8 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3 Introdução 25 4 Expressões Regulares 26 4.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.2 Comando grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.3 Os Metacaracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.4 Metacaracteres quantificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.5 Metacaracteres tipo âncora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.5.1 Circunflexo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.5.2 Cifrão - o fim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.5.3 Borda - a limítrofe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.6 Outros metacaracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.7 Explicando-os melhor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.7.1 Escape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.7.2 Ou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.7.3 Grupo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 1
  • 3. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 4.7.4 Retrovisor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 5 Parte I 35 5.1 Diálogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.2 O ambiente Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.3 O ambiente Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.4 Uma rápida passagem nos principais sabores de Shell . . . . . . . . . . . . . . . . . 36 5.5 Explicando o funcionamento do Shell . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.6 Caracteres para remoção do significado . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.7 Caracteres de redirecionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.7.1 Caracteres de redirecionamento . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.7.2 Redirecionamento da Saída Padrão . . . . . . . . . . . . . . . . . . . . . . . 40 5.7.3 Redirecionamento da Saída de erro Padrão . . . . . . . . . . . . . . . . . . . 41 5.7.4 Redirecionamento da Entrada Padrão . . . . . . . . . . . . . . . . . . . . . . 42 5.8 Redirecionamento de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.9 Caracteres de Ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 6 Parte II 48 6.1 Diálogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 6.2 Eu fico com o grep, você com a gripe . . . . . . . . . . . . . . . . . . . . . . . . . . 48 6.3 A família grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.4 Exemplos da família grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 6.5 Vamos montar uma cdteca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.6 Passando parâmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.7 Macetes paramétricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 7 Parte III 59 7.1 Trabalhando com cadeias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 7.2 O comando cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 7.2.1 O comando cut a opção -c . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 7.2.2 O comando cut a opção -f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 7.3 O comando tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 7.3.1 Trocando caracteres com tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 7.3.2 Removendo caracteres com tr . . . . . . . . . . . . . . . . . . . . . . . . . . 63 7.3.3 Xpremendo com tr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 7.3.4 O Comando if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 8 Parte IV 69 8.1 Diálogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 8.2 O comando Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 8.3 Continuação do comando test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 8.4 Encolheram o comando condicional . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 8.5 E tome de test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 8.6 Acaso casa com case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 2
  • 4. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 9 Parte V 81 9.1 Comandos de Loop (ou laço) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 9.2 O Comando for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 9.2.1 Primeira sintaxe do comando for . . . . . . . . . . . . . . . . . . . . . . . . . 81 9.2.2 Segunda sintaxe do comando for . . . . . . . . . . . . . . . . . . . . . . . . . 86 9.2.3 Terceira sintaxe do comando for . . . . . . . . . . . . . . . . . . . . . . . . . 88 10 Parte VI 90 10.1 Um pouco mais de for e matemática . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 10.2 O Comando while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 10.3 O Comando Until . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 10.4 Atalhos no loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 11 Parte VII 101 11.1 O comando tput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 11.2 E agora podemos ler os dados na tela . . . . . . . . . . . . . . . . . . . . . . . . . . 103 11.3 Vamos ler arquivos? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 12 Parte VIII 112 12.1 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 12.2 O comando source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 13 Parte IX 122 13.1 Envenenando a escrita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 13.2 Principais Variáveis do Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 13.3 Expansão de parâmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 14 Parte X 132 14.1 O comando eval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 14.2 Sinais de Processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 14.3 Sinais assassinos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 14.4 O trap não atrapalha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 14.5 O comando getopts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 15 Parte XI 144 15.1 Named Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 15.2 Sincronização de processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 15.3 Bloqueio de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 15.4 Substituição de processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 3
  • 5. Parte I Sobre essa Apostila 4
  • 6. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Conteúdo O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in- ternet, disponíveis em diversos sites ou originalmente produzido no CDTC (http://www.cdtc.org.br.) O formato original deste material bem como sua atualização está disponível dentro da licença GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de mesmo nome, tendo inclusive uma versão traduzida (não oficial). A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro de 2006. Críticas e sugestões construtivas serão bem-vindas a qualquer hora. Autores A autoria deste é de responsabilidade de Waldemar Silva Júnior (waldemar@cdtc.org.br). O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento que vêm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto com outros parceiros institucionais, e com as universidades federais brasileiras que tem produzido e utilizado Software Livre apoiando inclusive a comunidade Free Software junto a outras entidades no país. Informações adicionais podem ser obtidas através do email ouvidoria@cdtc.org.br, ou da home page da entidade, através da URL http://www.cdtc.org.br. Garantias O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi- lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido. Licença Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br) . Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS- TILA. A copy of the license is included in the section entitled GNU Free Documentation License. 5
  • 8. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Sobre o CDTC Objetivo Geral O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina- ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira. Objetivo Específico Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários, criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como incentivadores e defensores dos produtos de software não proprietários e código fonte aberto, ofe- recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de produtos de software não proprietários e do seu código fonte livre, articulando redes de terceiros (dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro- dutos de software livre. Guia do aluno Neste guia, você terá reunidas uma série de informações importantes para que você comece seu curso. São elas: • Licenças para cópia de material disponível; • Os 10 mandamentos do aluno de Educação a Distância; • Como participar dos foruns e da wikipédia; • Primeiros passos. É muito importante que você entre em contato com TODAS estas informações, seguindo o roteiro acima. Licença Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br). 7
  • 9. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu- mentação Livre GNU". Os 10 mandamentos do aluno de educação online • 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é pré-requisito para a participação nos cursos a distância; • 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá- tica é necessário para poder executar as tarefas; • 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân- cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal, dos colegas e dos professores; • 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus colegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos; • 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão e a sua recuperação de materiais; • 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e realizá-las em tempo real; • 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre; • 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens e descobertas; • 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é ponto - chave na comunicação pela Internet; • 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração. Como participar dos fóruns e Wikipédia Você tem um problema e precisa de ajuda? Podemos te ajudar de 2 formas: A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso: . O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a 8
  • 10. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que interesse ao grupo, favor postá-la aqui. Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do curso. É recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos mais efetivos para esta prática. . O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem ajudar. Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico é recomendável ver se a sua pergunta já foi feita por outro participante. A segunda forma se dá pelas Wikis: . Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par- ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé- dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por pessoas de todas as partes do mundo. Acesse-a em português pelos links: • Página principal da Wiki - http://pt.wikipedia.org/wiki/ Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo! Primeiros Passos Para uma melhor aprendizagem é recomendável que você siga os seguintes passos: • Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar; • Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das ferramentas básicas do mesmo; • Entrar nas lições seguindo a seqüência descrita no Plano de Ensino; • Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais. Perfil do Tutor Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores. O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar. 9
  • 11. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e, para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor ou instrutor: • fornece explicações claras acerca do que ele espera e do estilo de classificação que irá utilizar; • gosta que lhe façam perguntas adicionais; • identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por- que motivo a classificação foi ou não foi atribuída’; • tece comentários completos e construtivos, mas de forma agradável (em contraste com um reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de ameaça e de nervossismo’) • dá uma ajuda complementar para encorajar um estudante em dificuldade; • esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente; • ajuda o estudante a alcançar os seus objetivos; • é flexível quando necessário; • mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso, talvez numa fase menos interessante para o tutor); • escreve todas as correções de forma legível e com um nível de pormenorização adequado; • acima de tudo, devolve os trabalhos rapidamente; 10
  • 12. Parte III GNU Free Documentation License 11
  • 13. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF (Traduzido pelo João S. O. Bueno através do CIPSGA em 2001) Esta é uma tradução não oficial da Licença de Documentação Livre GNU em Português Brasi- leiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a distribuição de textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso. Entretanto, nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL. This is an unofficial translation of the GNU General Documentation License into Brazilian Por- tuguese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GFDL–only the original English text of the GFDL does that. However, we hope that this translation will help Portuguese speakers understand the GFDL better. Licença de Documentação Livre GNU Versão 1.1, Março de 2000 Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, mas não é permitido alterá-lo. INTRODUÇÃO O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"no sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiá-lo ou redistribui-lo, com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantém para o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsável pelas modificações feitas por terceiros. Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações do documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge- ral (GNU GPL), que é um copyleft para software livre. Nós fizemos esta Licença para que seja usada em manuais de software livre, por que software livre precisa de documentação livre: um programa livre deve ser acompanhado de manuais que provenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita a manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente do assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença prin- cipalmente para trabalhos cujo propósito seja de introdução ou referência. APLICABILIDADE E DEFINIÇÕES Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo detentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença. O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um 12
  • 14. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF licenciado e é referida como "você". Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documento ou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outra língua. Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex- clusivamente da relação dos editores ou dos autores do Documento com o assunto geral do Documento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamente nesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, a Seção Secundária pode não explicar nada de matemática). Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci- onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo. As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, como sendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença. Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de Capa Frontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença. Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica- mente, representada num formato cuja especificação esteja disponível ao público geral, cujos conteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editores de texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou (para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível de servir como entrada a formatadores de texto ou para tradução automática para uma variedade de formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formato de arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de- sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é "Transparente"é chamada de "Opaca". Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim- ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML usando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, e projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos proprietários que podem ser lidos e editados apenas com processadores de texto proprietários, SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejam disponíveis para o público, e HTML gerado automaticamente por alguns editores de texto com finalidade apenas de saída. A "Página do Título"significa, para um livro impresso, a página do título propriamente dita, mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível, o material que esta Licença requer que apareça na página do título. Para trabalhos que não tenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe- minente do título do trabalho, precedendo o início do corpo do texto. 13
  • 15. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF FAZENDO CÓPIAS EXATAS Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou não comercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que esta Licença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres- cente nenhuma outra condição, quaisquer que sejam, às desta Licença. Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção de cópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com- pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias, você também precisa respeitar as condições da seção 3. Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e também pode exibir cópias publicamente. FAZENDO CÓPIAS EM QUANTIDADE Se você publicar cópias do Documento em número maior que 100, e a nota de licença do Documento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clara e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e Textos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara e legivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o título com- pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionar outros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estas preservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópia exata em outros aspectos. Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma legível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capa verdadeira, e continuar os outros nas páginas adjacentes. Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, você precisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópia Opaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparente completa do Documento acessível publicamente em uma rede de computadores, à qual o público usuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos de protocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel- mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurar que esta cópia Transparente vai permanecer acessível desta forma na localização especificada por pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta- mente ou através de seus agentes ou distribuidores) daquela edição para o público. É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes de redistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover você com uma versão atualizada do Documento. 14
  • 16. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF MODIFICAÇÕES Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se- ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença, com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuição e modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Além disso, você precisa fazer o seguinte na versão modificada: A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do- cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listados na seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior se o editor original daquela versão lhe der permissão; B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá- veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cinco dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que cinco); C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor; D. Preservar todas as notas de copyright do Documento; E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente às outras notas de copyright; F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao público o direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópico abaixo; G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos de Capa requeridos dados na nota de licença do Documento; H. Incluir uma cópia inalterada desta Licença; I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendo pelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página de Título. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo o título, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionar um item descrevendo a Versão Modificada, tal como descrito na sentença anterior; J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a uma cópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu- mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção "Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicado pelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refira der sua permissão; K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da 15
  • 17. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri- buidores e/ou dedicatórias dados; L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou em seus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção; M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na Versão Modificada; N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outro título dado a uma Seção Invariante. Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem como Seções Secundárias e não contenham nenhum material copiado do Documento, você pode optar por designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seus títulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci- sam ser diferentes de qualquer outro título de seção. Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual- quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - por exemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como a definição oficial de um padrão. Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente , e uma passagem de até 25 palavras como um Texto de Quarta Capa, ao final da lista de Textos de Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma de Texto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade. Se o Documento já incluir um texto de capa para a mesma capa, adicionado previamente por você ou por acordo feito com alguma entidade para a qual você esteja agindo, você não pode adicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior que adicionou a passagem antiga. O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seus nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer Versão Modificada. COMBINANDO DOCUMENTOS Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob os termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com- binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e liste todas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença. O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções Invariantes Idênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houver múltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de 16
  • 18. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editor origianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajuste nos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado. Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver- sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combine quaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas as seções entituladas como "Endosso". COLETÂNEAS DE DOCUMENTOS Você pode fazer uma coletânea consitindo do Documento e outros documentos publicados sob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos com uma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópia exata de cada um dos Documentos em todos os outros aspectos. Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sob esta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga esta Licença em todos os outros aspectos relacionados à cópia exata daquele documento. AGREGAÇÃO COM TRABALHOS INDEPENDENTES Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se- parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver- são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pela compilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outros trabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assim compilados, e eles não são trabalhos derivados do Documento. Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento, então, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capa do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado. Senão eles precisarão aparecer nas capas de todo o agregado. TRADUÇÃO Tradução é considerada como um tipo de modificação, então você pode distribuir traduções do Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduções requer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluir traduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessas Seções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in- clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a 17
  • 19. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF versão original em Inglês desta Licença, a versão original em Inglês prevalecerá. TÉRMINO Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres- samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen- ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitos sob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob esta Licença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em total acordo com esta Licença. REVISÕES FUTURAS DESTA LICENÇA A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen- tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versão presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Veja http://www.gnu.org/copyleft/. A cada versão da Licença é dado um número de versão distinto. Se o Documento especificar que uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, você tem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versão posterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o Documento não especificar um número de Versão desta Licença, você pode escolher qualquer versão já publicada (não como rascunho) pela Free Software Foundation. ADENDO: Como usar esta Licença para seus documentos Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licença no documento e ponha as seguintes notas de copyright e licenças logo após a página de título: Copyright (c) ANO SEU NOME. É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft- ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos da Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li- cença está inclusa na seção entitulada "Licença de Documentação Livre GNU". Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés de dizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos de Capa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os Textos da Quarta Capa. Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda- mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre, 18
  • 20. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF tal como a GNU General Public License, para permitir o seu uso em software livre. 19
  • 22. Capítulo 1 O que é Shell Script Shell é o nome que se dá à linha de comando em modo texto dos sistemas operacionais Linux e UNIX. E, portanto, os shell scripts são um meio de se juntar uma porção de comandos shell em um só arquivo para serem executados quantas vezes forem necessárias. Os arquivos de lote (bach) do windows são similares, apenas com uma significativa diferença, já que a linha de comando de sistemas Unix e Linux é mais poderosa. 21
  • 23. Capítulo 2 Plano de ensino 2.1 Objetivo verb Capacitar o usuário para o aprendizado básico dos comandos do Linux. 2.2 Público Alvo Usuários que tenham perfil administrativo, desenvolvedores, programadores e interessados em geral. 2.3 Pré-requisitos Os usuários deverão ser, necessariamente, funcionários públicos e ter conhecimentos básicos para operar um computador com uma distribuição baseada no Debian instalada. 2.4 Descrição O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodle como ferramenta de aprendizagem. O curso tem duração de uma semana e possui um conjunto de atividades (lições, fóruns, glossários, questionários e outros) que deverão ser executadas de acordo com as instruções fornecidas. O material didático está disponível on-line de acordo com as datas pré-estabelecidas em cada tópico. 2.5 Metodologia O curso está dividido da seguinte maneira: Duração Descrição do Módulo 1 semana Expressões Regulares 2 semana Ambiente Shell e Comandos de manipulação de caracteres Todo o material está no formato de lições, e estará disponível ao longo do curso. Ao final de cada semana do curso será disponibilizada a prova referente ao módulo estudado anteriormente 22
  • 24. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF que também conterá perguntas sobre os textos indicados. Utilize o material de cada semana e os exemplos disponibilizados para se preparar para prova. As lições contêm o conteúdo principal. Elas poderão ser acessadas quantas vezes forem neces- sárias, desde que estejam dentro da semana programada. Ao final de uma lição, você receberá uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada li- ção, pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição seja menor que 6.0, sugerimos que você faça novamente esta lição. Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das lições quanto a da avaliação serão consideradas para a nota final. Todos os módulos ficarão visíveis para que possam ser consultados durante a avaliação final. Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de En- sino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma. Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deverá ser enviada ao fórum. Diariamente os monitores darão respostas e esclarecimentos. 2.6 Programa O curso de CVS oferecerá o seguinte conteúdo: • Expressões regulares; • Ambiente Shell, Linhas de comando, Caracteres de remoção, redirecionamento e ambiente; • A família grep, Passagens de parâmetros; • Comando cut, Comando tr, Usando separadores, Comando condicionais; • O comando eval, O trap não atrapalha, O comando getopts; • Comando test, Simplificações dos comandos condicionais; • Comandos de Loop; • Um pouco mais de Loops e matemática; • O comando tput; • Funções; • Variáveis do Shell; • Named Pipes. 2.7 Avaliação Toda a avaliação será feita on-line. Aspectos a serem considerados na avaliação: • Expressões Regulares; 23
  • 25. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • Ambiente Shell; • Comandos de manipulação de caracteres; • Capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados. Instrumentos de avaliação: • Participação ativa nas atividades programadas. • Avaliação ao final do curso. • O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação e obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo com a fórmula abaixo: • Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições • AF = Avaliações 2.8 Bibliografia • Site http://aurelio.net/shell/ • Site: http://www.ic.unicamp.br/ celio/mc514/bash/bash.html 24
  • 26. Capítulo 3 Introdução Sejam bem vindos ao curso de Bash Básico! O curso tem duração de apenas duas semanas e consiste na leitura de alguns livros e lições e, ao término delas, realizar algumas avaliações. Todas essas atividades valem pontuação. Para um bom aproveitamento do curso é importante que haja entrosamento com os materiais, os fó- runs e os tutores. Seja participativo, questione e tire suas dúvidas. O material didático é do prof. Júlio Neves e de fato não há nada melhor que aprender brincando. É interessante que já esteja instalado o Linux e que deixe o terminal sempre aberto. Assim facilita acompanhar o raciocínio da leitura. Qualquer dúvida quanto ao comando pode ser resolvida digitando no Shell: $ man nomedocomando ou ainda discutindo concosco no fórum. Assim aprendemos juntos a funcionalidade de cada um. Bom trabalho! 25
  • 27. Capítulo 4 Expressões Regulares 4.1 Introdução Uma Expressão Regular (ER) é um método formal de se especificar um padrão de texto. É uma composição de símbolos, caracteres com funções especiais, chamados "metacaracte- res"que, agrupados entre si e com caracteres literais, formam uma seqüência, uma expressão. Essa expressão é testada em textos e retorna sucesso caso este texto obedeça exatamente a todas as suas condições. Diz-se que o texto "casou"com a expressão. A ERs servem para se dizer algo abrangente de forma específica. Definido o padrão de busca, tem-se uma lista (finita ou não) de possibilidades de casamento. Em um exemplo rápido, [rgp]ato pode casar "rato", "gato"e "pato"]. As ERs são úteis para buscar ou validar textos variáveis como: • data; • horário; • número IP; • endereço de e-mail; • endereço de Internet; • declaração de uma função (); • dados na coluna N de um texto; • dados que estão entre <tags></tags>; • número de telefone, RG, CPF, cartão de crédito. Vários editores de texto e linguagens de programação têm suporte a ERs, então, o tempo inves- tido em seu aprendizado é recompensado pela larga variedade de aplicativos onde ele pode ser praticado. 4.2 Comando grep Para não precisar listar todo o conteúdo de um arquivo por completo para apenas saber os dados do usuário "root", pode-se usar o grep para pesquisar e retornar somente a linha dele. O 26
  • 28. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF comando grep tem o seguinte formato: grep palavra arquivo Vamos utilizar como exemplo o arquivo /etc/passwd, que é a base de usuários de um sistema UNIX/Linux. Vale a pena, antes, verificar como que se constitui esse arquivo dando o comando: $cat /etc/passwd Observa-se que serão obtidas várias linhas, onde cada um se refere a um usuário diferente. E cada linha possui o seguinte formato: login : senha : UID : GID : Nome completo : Diretório $HOME : shellz Voltando ao grep. Para "pescar"somente a linha do usuário root faremos: $ grep root /etc/passwd root:x:0:0:root:/root:/bin/bash 4.3 Os Metacaracteres Cada metacaracteres é uma ferramenta que tem uma função específica. Servem para dar mais poder às pesquisas, informando padrões e posições impossíveis de se especificar usando somente caracteres normais. Os metacaracteres são pequenos pedacinhos simples, que agrupados entre si ou com carac- teres normais formam algo maior, uma expressão. O importante é compreender bem cada um individualmente, e depois apenas lê-los em seqüência. Metacaracteres Representantes São aqueles cuja função é representar um ou mais caracteres. Ponto . Lista [...] Lista Negada [^...] O ponto O ponto é nosso curinga solitário, que está sempre à procura de um casamento não importa com quem seja. Pode ser um número, uma letra, um TAB, um , o que vier ele traça, pois o ponto casa qualquer coisa. Exemplos: "n.o"casaria: não, nao, ... 27
  • 29. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF ".eclado"casaria: teclado, Teclado, ... "12.45"casaria: 12:45, 12 45, 12.45, ... A lista Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exatamente o que quer, e nada diferente daquilo, a lista casa com quem ela conhece. Toda "lista"(os colchetes e seu conteúdo) vale para apenas uma posição, um caractere, por maior que seja. Exemplos: n[ãa]o não, nao, ... [Tt]eclado teclado, Teclado, .... 12[:. ]45 12:45, 12 45, 12.45, ... A lista é de certa forma exigente. Sendo assim: Evite Prefira: [0123456789] [0-9] [0-9][0-9]:[0-9][0-9] [012][0-9]:[0-5][0-9] [A-z] [A-Za-z] Lista negada A lista negada é exatamente igual à lista, podendo ter caracteres literais, intervalos e classes POSIX. Tudo o que se aplica a lista normal, se aplica à negada também. A única diferença é que ela possui lógica inversa, ou seja, ela casará com qualquer coisa, fora os componentes listados. Observe que a diferença em sua notação é que o primeiro caractere da lista é um circunflexo, ele indica que esta é uma lista negada. Então, se [0-9] são números, [^0-9] é qualquer coisa fora números. Pode ser letras, símbolos, espaço em branco, qualquer coisa menos números. Porém, ao iniciar o circunflexo (^) fora das chaves possui outro significado diferente: simboliza o início de uma linha. Mas tem de ser alguma coisa. Só porque ela é uma lista negada isso não significa que ela pode casar "nada". Exemplos: [A-Z^] casa maiúsculas e o circunflexo e [^A-Z^]casa tudo fora isso. Como mandam as regras da boa escrita, sempre após caracteres de pontuação como a vírgula ou o ponto, devemos ter um espaço em branco os separando do resto do texto. Então, vamos procurar por qualquer coisa que não o espaço após a pontuação: [:;,.!?][^ ] 4.4 Metacaracteres quantificadores Os quantificadores servem para indicar o número de repetições permitidas para a entidade imediatamente anterior. Essa entidade pode ser um caractere ou metacaractere. Em outras pa- lavras, eles dizem a quantidade de repetições que o átomo anterior pode ter, quantas vezes ele pode aparecer. São eles: opcional ? asterisco * mais + 28
  • 30. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF chaves Opcional É útil para procurar palavras no singular e plural e pode ser tornar opcionais caracteres e me- tacaracteres. Exemplos: Expressão Casa com Ondas? Onda Ondas Senadora? Senador Senadora [BFM]?ala ala Bala Fala Mala Asterisco Pode aparecer em qualquer quantidade. O curinga .* é o tudo e o nada, qualquer coisa. Exem- plos: 6*0 0, 60, 660, 6660, ..., 666666666660, ... bi*p bp, bip, biip, biiip, biiiip... b[ip]* b, bi, bip, biipp, bpipipi, biiiiip ... Mais Tem funcionamento idêntico ao do asterisco, tudo o que vale para um, se aplica ao outro. A única diferença é que o mais (+) não é opcional, então a entidade anterior deve casar pelo menos uma vez, e pode ter várias. Sua utilidade é quando queremos no mínimo uma repetição. Exem- plos: 6+0 60, 660, 6660, ..., 666666660, ... bi+p bip, biip, biiip, biiiip... b[ip]+ bi, bip, biipp, bpipipi, biiiiip, bppp, ... Chaves As chaves são a solução para uma quantificação mais controlada, onde se pode especificar exa- tamente quantas repetições se quer da entidade anterior. Colocando um número entre chaves " ", indica-se uma quantidade de repetições do caractere (ou metacaractere) anterior. As chaves são precisas podendo especificar um número exato, um mínimo, um máximo, ou uma faixa numérica. Elas, inclusive, simulam o *, + e ?. Exemplos: n,m significa de n até m vezes, assim algo como 61,4 casa 6, 66, 666 e 6666. Só, nada mais que isso. 0,1 zero ou 1 (igual ao opcional) 0, zero ou mais (igual ao asterisco) 1, um ou mais (igual ao mais) 3 exatamente 29
  • 31. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 4.5 Metacaracteres tipo âncora São aqueles que não casam caracteres ou definem quantidades, ao invés disso eles marcam uma posição específica na linha. Assim, eles não podem ser quantificados, então o mais, o aste- risco e as chaves não têm influência sobre âncoras. São eles: • circunflexo - ^ • cifrão - $ • borda - /b Explicando cada metacaractere 4.5.1 Circunflexo Este metacaractere (do tipo de posicionamento por representar uma posição específica da linha) simboliza o início de uma linha. É também o marcador de lista negada, mas apenas dentro da lista (e no começo), fora dela ele é a âncora que marca o início de uma linha, veja: ^[0-9] significa que casa com uma linha começando com qualquer algarismo. O inverso disso seria: ^[^0-9] 4.5.2 Cifrão - o fim Este é similar e complementar ao circunflexo, pois representa o fim de uma linha e só é válido no final de uma expressão regular. Quando demos o comando: $ grep bash$ /etc/passwd significa que procuramos pela palavra "bash"no final da linha, ou ainda, a palavra "bash"seguida de um fim de linha. Esse cifrão é o mesmo caractere que é utilizado para identificar as variáveis do shell, como $PWD e $HOME. Para evitar possíveis problemas com a expansão de variáveis, é preciso "proteger"a expressão regular passada ao grep. A proteção é feita colocando-se a ER entre ’aspas simples’ fazendo: $ grep ’bash$’ /etc/passwd Veja outros exemplos: 30
  • 32. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF . 4.5.3 Borda - a limítrofe A borda marca os limites de uma palavra, ou seja, onde ela começa e/ou termina. É muito útil para casar palavras exatas, e não partes de palavras. Palavra aqui é um conceito que engloba apenas letras, números e o sublinhado: [A-Za-z0-9_] Veja os exemplos: Veja como se comportam as ERs nas palavras dia, diafragma, radial, melodia e bom-dia!: • dia - - - dia, diafragma, radial, melodia, bom-dia! • bdia - - - dia, diafragma, bom-dia! • diab - - - dia, melodia, bom-dia! • bdiab — dia, bom-dia! 4.6 Outros metacaracteres Vamos ver outros metacaracteres, que têm funções específicas e não relacionadas entre si, portanto não podem ser agrupados em outra classe fora a tradicional "outros". Mas atenção, isso não quer dizer que eles são inferiores, pelo contrário, o poder das ERs é multiplicado com seu uso e um mundo de possibilidades novas se abre a sua frente. São eles: • escape • ou | • grupo () • retrovisor /n 4.7 Explicando-os melhor 4.7.1 Escape Temos duas formas de casar um metacaractere dentro de uma ER: • Usando Listas: Lua[*] casa com Lua* 31
  • 33. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • "Escapando"o Caractere: Lua* casa com Lua* Isto é, a contrabarra () "escapa"qualquer metacaractere, tirando todos os seus poderes. O es- cape é tão poderoso que pode escapar a si próprio! O casa uma barra invertida literal. Então, agora que sabemos muito sobre ERs, que tal uma expressão para casar um número de RG? Lembre-se que ele tem o formato n.nnn.nnn-n, é fácil! [0-9].[0-9]{3}.[0-9]{3}-[0-9] O * = [*] = asterisco literal Ironia -> O escape escapa o escape, escapando-se a si próprio, simultaneamente. 4.7.2 Ou Para procurar por uma coisa ou outra, deve-se usar o pipe "|" e delimitar as opções com os parênteses "( )". É muito comum em uma posição específica de nossa Expressão Regular (ER) termos mais de uma alternativa possível, por exemplo, ao casar um cumprimento amistoso, podemos ter uma terminação diferente para cada parte do dia: boa-tarde|boa-noite O ’ou’ serve para esses casos em que precisamos dessas alternativas. Essa ER se lê: "ou boa-tarde, ou boa-noite", ou seja "ou isso ou aquilo". Lembre que a lista também é uma espécie de ou (|), mas apenas para uma letra, então: [gpr]ato é o mesmo que gato|pato|rato São similares, embora nesse caso em que apenas uma letra muda entre as alternativas, a lista é a melhor escolha. Em outro exemplo, o ou é útil também para casarmos um endereço de Internet, que pode ser uma página, ou um sítio FTP http://|ftp:// 4.7.3 Grupo Assim como artistas famosos e personalidades que conseguem arrastar multidões, o grupo tem o dom de juntar vários tipos de sujeitos em um mesmo local. Dentro de um grupo podemos ter um ou mais caracteres, metacarateres e inclusive outros grupos. Como em uma expressão matemática, os parênteses definem um grupo e seu conteúdo pode ser visto como um bloco na expressão. Todos os metacaracteres quantificadores que vimos anteriormente podem ter seu poder ampli- ado pelo grupo, pois ele lhes dá mais abrangência. E o ’ou’, pelo contrário, tem sua abrangência limitada pelo grupo, e pode parecer estranho, mas é essa limitação que lhe dá mais poder. Em um exemplo simples, (ai)+ agrupa a palavra ai e esse grupo está quantificado pelo mais (+). Isso quer dizer que casamos várias repetições da palavra, como ai, aiai, aiaiai, ... E assim podemos agrupar tudo o 32
  • 34. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF que quisermos, literais e metacaracteres, e quantificá-los: (ha!)+ ha!, ha!ha!, ha!ha!ha!, ... (.[0-9]){3} .0.6.2, .2.8.9, .6.6.6, ... (www˙)?zz.com www.zz.com, zz.com E em especial, nosso amigo ou ganha limites ou seu poder cresce: boa-(tarde|noite) boa-tarde, boa-noite #(|n.|núm) 6 # 6, n. 6, núm 6 (in|con)?certo incerto, concerto, certo Podemos criar subgrupos também, então imagine que você esteja procurando o nome de um supermercado em uma listagem e não sabe se este é um mercado, supermercado ou um hiper- mercado. (super|hiper)mercado Consegue casar as duas últimas possibilidades, mas note que nas alternativas super e hiper temos um trecho per comum aos dois, então podíamos "alternativizar"apenas as diferenças su e hi: (su|hi)permercado Precisamos também casar apenas o mercado sem os aumentativos, então temos de agrupá- los e torná-los opcionais: ((su|hi)per)?mercado Ei! E se tivesse minimercado também? (mini|(su|hi)per)?mercado 4.7.4 Retrovisor (quero)- 1 Mas esse 1 não é o tal do escape? Pois é, lembra que o escape () servia para tirar os poderes do metacaractere seguinte. En- tão, a essa definição agora incluímos: a não ser que este próximo caractere seja um número de 1 a 9, então estamos lidando com um retrovisor. Notou o detalhe? Podemos ter no máximo 9 retrovisores por ER, então 10 é o retrovisor nú- mero 1 seguido de um zero. O verdadeiro poder do retrovisor é quando não sabemos exatamente qual texto o grupo casará. Vamos estender o quero do exemplo anterior para "qualquer palavra": http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html ([A- 33
  • 35. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Za-z]+)-1 Viu o poder dessa ER? Ela casa palavras repetidas separadas por um traço, como o próprio quero-quero, e mais: bate-bate, come-come, etc. Mas, e se tornássemos o traço opcional? ([A-Za-z]+)-?1 Com uma modificação pequena, fazemos um minicorretor ortográfico para procurar por palavras repetidas como estas em um texto: ([A-Za-z]+) 1 Mas, lembre-se que procuramos por palavras inteiras e não apenas trechos delas, então pre- cisamos usar as bordas para completar nossa ER: b([A-Za-z]+) 1b http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html Como já dito, podemos usar no máximo nove retrovisores. Vamos ver uns exemplos com mais de um de nossos amigos novos: • (lenta)(mente) é 2 1 lentamente é mente lenta • ((band)eira)nte 1 2a bandeirante bandeira banda • in(d)ol(or) é sem 1 2 indolor é sem dor • ((((a)b)c)d)-1 = 1, 2, 3, 4 abcd-1 = abcd,abc,ab,a Repare que numeram-se retrovisores contando os grupos da esquerda para a direita. Ao usar um (grupo) qualquer, você ganha um brinde, e muitas vezes nem sabe. O brinde é o trecho de texto casado pela ER que está no grupo, que fica guardado em um cantinho especial e pode ser usado em outras partes da mesma ER. Então, o retrovisor 1 é uma referência ao texto casado do primeiro grupo, nesse caso quero, ficando, no fim das contas, a expressão que queríamos. O retrovisor pode ser lembrado também como um link ou um ladrão, pois copia o texto do grupo. Como o nome diz, é retrovisor porque ele "olha pra trás", para buscar um trecho já casado. Isso é muito útil para casar trechos repetidos em uma mesma linha. Veja bem, é o texto, e não a ER. Como exemplo, em um texto, procuramos quero-quero. Podemos procurar literalmente por quero- quero, mas assim não tem graça, vamos usar o grupo e o retrovisor para fazer isso. 34
  • 36. Capítulo 5 Parte I 5.1 Diálogo Diálogo entre um Linuxer e um empurrador de mouse: - Quem é o Bash? - O Bash é o filho mais novo da família Shell. - Pô cara! Estás a fim de me deixar maluco? Eu tinha uma dúvida e você me deixa com duas! - Não, maluco você já é há muito tempo. Desde que se decidiu a usar aquele sistema operacional que você tem que dar dez boots por dia e não tem domínio nenhum sobre o que está acontecendo no seu computador. Mas deixa isso prá lá, vou te explicar o que é Shell e os componentes de sua família e ao final da explanação você dirá: "Meu Deus do Shell! Porque eu não optei pelo Linux antes?". 5.2 O ambiente Linux Para você entender o que é e como funciona o Shell, primeiro será mostrado como funciona o ambiente em camadas do Linux. Dê uma olhada no gráfico abaixo: 35
  • 37. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF . Neste gráfico dá para ver que a camada de hardware é a mais profunda e é formada pelos com- ponentes físicos do seu computador. Envolvendo esta, vem a camada do kernel que é o cerne do Linux, seu núcleo, é quem coloca o hardware para funcionar fazendo seu gerenciamento e con- trole. Os programas e comandos que envolvem o kernel, dele se utilizam para realizar as tarefas aplicativas para que foram desenvolvidos. Fechando tudo isso vem o Shell que leva este nome porque em inglês, Shell significa concha, carapaça, isto é, fica entre o usuário e o sistema opera- cional, de forma que tudo que interage com o sistema operacional, tem que passar pelo seu crivo. http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html 5.3 O ambiente Shell Bom já que para chegar ao núcleo do Linux, no seu kernel que é o que interessa a todo apli- cativo, é necessária a filtragem do Shell, vamos entender como ele funciona de forma a tirar o máximo proveito das inúmeras facilidades que ele nos oferece. O Linux por definição é um sistema multiusuário - não podemos nunca esquecer disto - e para per- mitir o acesso de determinados usuários e barrar a entrada de outros, existe um arquivo chamado /etc/passwd que além de fornecer dados para esta função de "leão-de-chácara"do Linux, tam- bém provê informações para o login daqueles que passaram por esta primeira barreira. O último campo de seus registros informa ao sistema qual Shell a pessoa receberá ao se "logar"(ARGH!!!). Lembra que foi falado de Shell, família, irmão? Pois é, vamos começar a entender isto: o Shell, que se vale da imagem de uma concha envolvendo o sistema operacional propriamente dito, é o nome genérico para tratar os filhos desta idéia que, ao longo dos anos de existência do sistema operacional Unix foram aparecendo. Atualmente existem diversos sabores de Shell, dentre estes é destacado o sh (Bourne Shell), o ksh (Korn Shell), bash (Bourne Again Shell) e o csh (C Shell). 5.4 Uma rápida passagem nos principais sabores de Shell Bourne Shell (sh) Desenvolvido por Stephen Bourne da Bell Labs (da AT&T onde também foi desenvolvido o Unix), este foi durante muitos anos o Shell default do sistema operacional Unix. É também chamado de Standard Shell por ter sido durante vários anos o único e até hoje é o mais utilizado até porque ele foi portado para todos os ambientes Unix e distros Linux. Korn Shell (ksh) Desenvolvido por David Korn, também da Bell Labs, é um superset do sh, isto é, possui todas as facilidades do sh e a elas agregou muitas outras. A compatibilidade total com o sh vem trazendo muitos usuários e programadores de Shell para este ambiente. Bourne Again Shell (bash) Este é o Shell mais moderno e cujo número de adeptos mais cresce em todo o mundo, seja por ser o Shell default do Linux, seu sistema operacional hospedeiro, seja por sua grande diver- sidade de comandos que incorpora inclusive diversos instruções características do C Shell. C 36
  • 38. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Shell (csh) Desenvolvido por Bill Joy da Berkley University é o Shell mais utilizado em ambientes *BSD e Xenix. A estruturação de seus comandos é bem similar à da linguagem C. Seu grande pecado foi ignorar a compatibilidade com o sh, partindo por um caminho próprio. Além destes Shells existem outros, mas, neste curso, será abordado somente sobre os três pri- meiros tratando-os genericamente por Shell e assinalando as especificidades de cada um que porventura hajam. Atenção: Quando foi dito que o último campo do /etc/passwd informa ao sistema qual é o Shell que o usuário receberá ao se "logar", é para ser interpretado ao pé-da-letra, isto é, se neste campo do seu registro estiver prog, a pessoa ao acessar o sistema receberá a tela de execução do programa prog e ao terminar a sua execução ganhará imediatamente um logout. Imagine o quanto se pode incrementar a segurança com este simples. artifício. 5.5 Explicando o funcionamento do Shell O Shell é o primeiro programa que você ganha ao se "logar"no Linux. É ele que resolverá vá- rias coisas de forma a não onerar o kernel com tarefas repetitivas, aliviando-o para tratar assuntos mais nobres. Como cada usuário possui o seu próprio Shell interpondo-se entre ele e o Linux, é o Shell quem interpreta os comandos que são teclados e examina as suas sintaxes, passando-os esmiuçados para execução. O Shell é um interpretador (ou será intérprete) que traz consigo uma poderosa linguagem com comandos de alto nível, que permite construção de loops (laços), de tomadas de decisão e de armazenamento de valores em variáveis, como será mostrado. Será explicado as principais tarefas que o Shell cumpre, na sua ordem de execução. Preste aten- ção nesta ordem porque ela é fundamental para o entendimento do resto do nosso bate papo. Exame da Linha de Comandos Neste exame, o Shell identifica os caracteres especiais (reservados) que têm significado para interpretação da linha, logo após verifica se a linha passada é um comando ou uma atribuição. Comando Quando uma linha é digitada no prompt do Linux, ela é dividida em pedaços separados por es- paço em branco: o primeiro pedaço é o nome do programa que terá sua existência pesquisada; identifica em seguida, nesta ordem, opções/parâmetros, redirecionamentos e variáveis. Quando o programa identificado existe, o Shell verifica as permissões dos arquivos envolvidos (inclusive o próprio programa), dando um erro caso você não esteja credenciado a executar esta tarefa. Atribuição Se o Shell encontra dois campos separados por um sinal de igual ()= sem espaços em branco 37
  • 39. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF entre eles, identifica esta seqüência como uma atribuição. Exemplos: $ ls linux linux Neste exemplo, o Shell identificou o ls como um programa e o linux como um parâmetro pas- sado para o programa ls. $ valor=1000 Neste caso, por não haver espaços em branco (já dá para notar que o branco é um dos ca- racteres reservados) o Shell identificou uma atribuição e colocou 1000 na variável valor. Jamais Faça: $ valor = 1000 bash: valor: not found Neste caso, o Bash achou a palavra valor isolada por brancos e julgou que você estivesse man- dando executar um programa chamado valor, para o qual estaria passando dois parâmetros: = e 1000. Resolução de Redirecionamentos Após identificar os componentes da linha que você teclou, o Shell parte para a resolução de redirecionamentos. O Shell tem incorporado ao seu elenco de vantagens o que chamamos de redirecionamento, que pode ser de entrada (stdin), de saída (stdout) ou dos erros (stderr), con- forme será explicado a seguir. Substituição de Variáveis Neste ponto, o Shell verifica se as eventuais variáveis (parâmetros começados por $), encontra- das no escopo do comando, estão definidas e as substitui por seus valores atuais. Substituição de Meta Caracteres Se algum metacaractere (*, ? ou []) foi encontrado na linha de comando, neste ponto ele será substituído por seus possíveis valores. Supondo que o único arquivo no seu diretório cor- rente começado pela letra n seja um diretório chamado "nomegrandeprachuchu", se você fizer: $ cd n* Passa Linha de Comando para o kernel Completadas as tarefas anteriores, o Shell monta a linha de comandos, já com todas as subs- tituições feitas, chama o kernel para executá-la em um novo Shell (Shell filho), ganhando um número de processo (PID ou Process Identification) e permanece inativo durante a execução do programa. Uma vez encerrado este processo (juntamente com o Shell filho), recebe novamente o controle e, exibindo um prompt, mostra que está pronto para executar outros comandos. 38
  • 40. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 5.6 Caracteres para remoção do significado É isso mesmo, quando não se deseja que o Shell interprete um caractere especial, deve-se "escondê-lo"dele. Isso pode ser feito de três formas distintas: Apóstrofo ou plic (’) Quando o Shell vê uma cadeia de caracteres entre apóstrofos ('), ele tira os apóstrofos da ca- deia e não interpreta seu conteúdo. $ ls linux* linuxmagazine $ ls ’linux*’ bash: linux* no such file or directory No primeiro caso, o Shell "expandiu"o asterisco e descobriu o arquivo linuxmagazine para lis- tar. No segundo, os apóstrofos inibiram a interpretação do Shell e veio a resposta que não existe o arquivo linux*. Contrabarra ou Barra Invertida () Idêntico aos apóstrofos exceto que a barra invertida inibe a interpretação somente do caractere que a segue. Suponha que você, acidentalmente, tenha criado um arquivo chamado * (asterisco) - que alguns sabores de Unix permitem - e deseja removê-lo. Se você fizesse: $ rm * Estaria cometendo um grande erro, pois o rm removeria todos os arquivos do diretório corrente. A melhor forma de fazer o pretendido é: $ rm * Desta forma, o Shell não interpretaria o asterisco e em conseqüência não faria a sua expan- são. Faça a seguinte experiência científica: $ cd /etc $ echo ’*’ $ echo * $ echo * Viu a diferença? Então, não precisa explicar mais. Aspas (") Exatamente igual ao apóstrofo exceto que, se a cadeia entre aspas contiver um cifrão ($), uma crase (`), ou uma barra invertida (), estes caracteres serão interpretados pelo Shell. Não precisa se preocupar, não foi dado exemplos do uso das aspas por que você ainda não co- nhece o cifrão($) nem a crase (`). Daqui para frente veremos com muita constância o uso destes 39
  • 41. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF caracteres especiais, o mais importante é entender o significado de cada um. 5.7 Caracteres de redirecionamento 5.7.1 Caracteres de redirecionamento A maioria dos comandos tem uma entrada, uma saída e pode gerar erros. Esta entrada é chamada Entrada Padrão ou stdin e seu default é o teclado do terminal. Analogamente, a saída do comando é chamada Saída Padrão ou stdout e seu default é a tela do terminal. Para a tela também são enviadas por default as mensagens de erro oriundas do comando que neste caso é a chamada Saída de Erro Padrão ou stderr. Veremos agora, como alterar este estado de coisas. Vamos fazer um programa gago. Para isto faça: $ cat O cat é uma instrução que lista o conteúdo do arquivo especificado para a Saída Padrão (st- dout). Caso a entrada não seja definida, ele espera os dados da stdin. Como não foi especificada a entrada, ele está esperando-a pelo teclado (Entrada Padrão) e como também não foi citada a saída, o que será teclado irá para a tela (Saída Padrão) fazendo desta forma, um programa gago. Experimente! 5.7.2 Redirecionamento da Saída Padrão Para especificarmos a saída de um programa usamos o > (maior que) ou o » (maior, maior) seguido do nome do arquivo para o qual se deseja mandar a saída. Vamos transformar o pro- grama gago em um editor de textos. $ cat > Arq O cat continua sem ter a entrada especificada, portanto está aguardando que os dados sejam teclados, porém a sua saída está sendo desviada para o arquivo Arq. Assim sendo, tudo que esta sendo teclado esta indo para dentro de Arq, de forma que fizemos o editor de textos mais curto e ruim do planeta. Se fizermos, novamente: $ cat > Arq Os dados contidos em Arq serão perdidos, já que antes do redirecionamento o ShellArq estava vazio. Para colocar mais informações no final do arquivo, deveriamos ter feito: criará um $ cat » Arq Atenção: Como já haviamos lhe dito, o Shell resolve a linha e depois manda o comando para a execução. Assim, se você redirecionar a saída de um arquivo 40
  • 42. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF para ele próprio, primeiramente o Shell "esvazia"este arquivo e depois manda o comando para execução, desta forma você acabou de perder o conteúdo do seu arquivo. Com isso dá para notar que o » (maior maior) serve para inserir texto no final do arquivo. 5.7.3 Redirecionamento da Saída de erro Padrão Assim como o default do Shell é receber os dados do teclado e mandar as saídas para a tela, os erros também serão enviados para a tela se você não especificar para onde deverão ser enviados. Para redirecionar os erros use 2> SaidaDeErro. Note que entre o número 2 e o sinal de maior (>) não existe espaço em branco. Atenção: Não confunda » com 2>. O primeiro anexa dados ao final de um arquivo, e o segundo redireciona a Saída de Erro Padrão (stderr) para um arquivo que está sendo designado. Isso é importante. Suponha que durante a execução de um script você pode, ou não (dependendo do rumo to- mado pela execução do programa), ter criado um arquivo chamado /tmp/seraqueexiste$$. Para não ficar sujeira no seu disco, ao final do script você colocaria uma linha: $ rm /tmp/seraqueexiste$ $ (dois cifrões juntos) Caso o arquivo não existisse seria enviado para a tela uma mensagem de erro. Para que isso não aconteça, deve-se fazer: $ rm /tmp/seraqueexiste$ $ 2> /dev/null (dois cifrões juntos) Sobre o exemplo visto, há duas dicas: Dica 1: O $ $ (dois cifrões juntos) contêm o PID, isto é, o número do seu processo. Como o Linux é multiusuário, é bom anexar sempre o $ $ (dois cifrões juntos) ao nome dos arquivos que serão usados por várias pessoas para não haver problema de propriedade, isto é, caso você batizasse o seu arquivo simplesmente como seraqueexiste, o primeiro que o usasse (criando-o então) seria o seu dono e todos os outros ganhariam um erro quando tentassem gravar algo nele. Para que você teste a Saída de Erro Padrão direto no prompt do seu Shell, vamos dar mais um exemplo. Faça: $ ls naoexiste bash: naoexiste no such file or directory $ ls naoexiste 2> arquivodeerros $ hspace*1cmtextbf$ cat arquivodeerros bash: naoexiste no such file or directory Neste exemplo, vimos que quando fizemos um ls em naoexiste, ganhamos uma mensagem de erro. Após, redirecionarmos a Saída de Erro Padrão para arquivodeerros e executarmos o 41
  • 43. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF mesmo comando, recebemos somente o prompt na tela. Quando listamos o conteúdo do arquivo para o qual foi redirecionada a Saída de Erro Padrão, vimos que a mensagem de erro tinha sido armazenada nele. Faça este teste. Dica 2: - Quem é esse tal de /dev/null? - Em Unix existe um arquivo fantasma. Chama-se /dev/null. Tudo que é mandado para este arquivo some, assemelha-se a um Buraco Negro. No caso do exemplo, como não nos interessava guardar a possível mensagem de erro oriunda do comando rm, redirecionamos- a para este arquivo. É interessante notar que estes caracteres de redirecionamento são cumulativos, isto é, se no exemplo anterior fizéssemos: $ ls naoexiste 2» arquivodeerros a mensagem de erro oriunda do ls seria anexada ao final de arquivodeerros. 5.7.4 Redirecionamento da Entrada Padrão Para fazermos o redirecionamento da Entrada Padrão, usamos o < (menor que). - E para que serve isso? - você irá perguntar. -Com esse exemplo você entenderá: Suponha que você queira mandar um email para o seu chefe. Ao invés de sair redigindo o email direto no prompt da tela de forma a tornar impossível a correção de uma frase anterior onde, sem querer, escreveu um "nós vai", você edita um arquivo com o conteúdo da mensagem e após umas quinze verificações sem constatar nenhum erro, decide enviá-lo e para tal, faz: $ mail chefe < arquivocommailparaochefe O seu chefe, então, receberá o conteúdo do arquivocommailparaochefe. Um outro tipo de redirecionamento que o Shell te permite é o chamado here document. Ele é representado por « (menor menor) e serve para indicar ao Shell que o escopo de um comando começa na linha seguinte e termina quando encontra uma linha cujo conteúdo seja unicamente o label que segue o sinal «. Veja o fragmento de script a seguir, com uma rotina de ftp: $ ftp -ivn hostremoto « fimftp user $Usuário $Senha binary get arquivoremoto fimftp Aqui, temos muitos detalhes interessantes: 1. As opções que foram usadas para o ftp (-ivn) servem para ele ir listando tudo que está acon- tecendo (-v de verbose), para não perguntar se você tem certeza de que deseja transmitir 42
  • 44. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF cada arquivo (-i de interactive), e finalmente a opção -n serve para dizer ao ftp para ele não solicitar o usuário e sua senha, pois esses serão informados pela instrução específica (user). 2. Quando foi usado o « fimftp, estava dizendo o seguinte para o intérprete: "Shell, não faça nada a partir daqui até encontrar o label fimftp. Você não entenderia nada, já que são instruções específicas do comando ftp e você não entende nada de =ftp=". Se fosse só isso seria simples, mas pelo próprio exemplo dá para ver que existem duas variáveis ($Usuário e $Senha), que o Shell resolverá antes do redirecionamento. Mas a grande vantagem desse tipo de construção é que ela permite que comandos também sejam interpretados dentro do escopo do here document, o que também contraria o que foi dito. Depois será explicado como isso funciona. Agora não dá, pois está faltando ferramenta. 1. O comando user é do repertório de instruções do ftp e serve para passar o usuário e a senha que haviam sido lidos em uma rotina anterior a esse fragmento de código e colocados, respectivamente, nas duas variáveis: $Usuário e $Senha. 2. . O binary é outra instrução do ftp, que serve para indicar que a transferência de arquivore- moto será feita em modo binário, isto é, o conteúdo do arquivo não será interpretado para saber se está em ASCII, EBCDIC, ... 3. O get arquivoremoto diz ao ftp para pegar esse arquivo em hostremoto e trazê-lo para o nosso host local. Se fosse para mandar o arquivo, usaríamos o comando put. Atenção: Um erro muito freqüente no uso de labels (como o fimftp do exemplo anterior) é causado pela presença de espaços em branco antes ou após o mesmo. Fique muito atento quanto a isso, por que este tipo de erro cria problemas no programador, até que seja de- tectado. Lembre-se: um label que se preze tem que ter uma linha inteira só para ele. 5.8 Redirecionamento de Comandos Os redirecionamentos que falamos até aqui sempre se referiam a arquivos, isto é mandavam para arquivo, recebiam de arquivo, simulavam arquivo local e etc. O que veremos a partir de agora redireciona a saída de um comando para a entrada de outro, é muito utilizado e ajuda bas- tante. Seu nome é pipe (que em inglês significa tubo, já que ele encana a saída de um comando para a entrada de outro) e sua representação é uma barra vertical (|). http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html $ ls | wc -l 21 O comando ls passou a lista de arquivos para o comando wc, que quando está com a opção -l conta a quantidade de linhas que recebeu. Desta forma, podemos afirmar categoricamente que no diretório existiam 21 arquivos. $ cat /etc/passwd |sort | lp 43
  • 45. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Esta linha de comandos manda a listagem do arquivo /etc/passwd para a entrada do comando sort. Este a classifica e manda-a para o lp que é o gerenciador do spool de impressão. 5.9 Caracteres de Ambiente Normalmente, ao priorizar uma expressão você a coloca entre parênteses, por causa da arit- mética é normal pensarmos desta forma. Mas em Shell o que prioriza mesmo são as crases (`) e não os parênteses. Vamos dar exemplos de uso das crases para você entender melhor. Eu quero saber quantos usuários estão "logados"no computador que eu administro. Eu posso fazer: $ who | wc -l 8 O comando who passa a lista de usuários conectados para o comando wc -l que conta quan- tas linhas recebeu e lista a resposta na tela. Pois bem, mas ao invés de ter um oito solto na tela, o que quero é que ele esteja no meio de uma frase. Para mandar frases para a tela, uso o comando echo, ficando assim: $ echo "Existem who | wc -l usuários conectados" Existem who | wc -l usuários conectados Não funcionou, e não foi por causa das aspas que eu coloquei, mas sim por que eu teria que ter executado o who | wc -l antes do echo. Para resolver este problema, tenho que priorizar esta segunda parte do comando com o uso de crases, fazendo assim: $ echo "Existem ’who | wc -l’ usuários conectados" Existem 8 usuários conectados Para eliminar esse monte de brancos antes do 8 que o wc -l produziu, basta tirar as aspas. Assim: $ echo Existem ’who | wc -l’ usuários conectados Existem 8 usuários conectados Como foi dito antes, as aspas protegem tudo que está dentro dos seus limites, da interpreta- ção do Shell. Como para o Shell basta um espaço em branco como separador, os vários espaços serão trocado por um único após a retirada das aspas. Quando estiver no Shell, você deve sempre dar um comando em cada linha. Para agrupar co- mandos em uma mesma linha, terá que separá-los por ponto-e-vírgula(;). Então: http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html $pwd ; cd /etc; pwd; cd -; pwd /home/meudir 44
  • 46. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF /etc/ /home/meudir Neste exemplo, listamos o nome do diretório corrente com o comando pwd, mudamos para o diretório /etc, novamente listamos o nome do diretório e, finalmente, voltamos para o diretório onde estava anteriormente (cd -), listando seu nome. Repare que foi colocado o ponto-e-vírgula (;) de todas as formas possíveis para mostrar que não importa se existem espaços em branco antes ou após este caractere. Finalmente, vamos ver o caso dos parênteses. Veja só o caso a seguir, bem parecido com o exemplo anterior: $ (pwd ; cd /etc ; pwd;) /home/meudir /etc/ $ pwd /home/meudir - Quequeiiisso minha gente? Eu estava no /home/meudir, mudei para o /etc, constatei que estava neste diretório com o pwd seguinte, e quando o agrupamento de comandos terminou, eu vi que continuava no /etc/meudir, como se eu nunca houvesse saído de lá! - Ih! Será que tem coisa de mágico aí? - Tá me estranhando, rapaz? Não é nada disso! O interessante do uso de parênteses é que ele invoca um novo Shell para executar os comandos que estão no seu interior. Desta forma, realmente fomos para o diretório /etc, porém quando todos os comandos dentro dos parênteses foram executados, o novo Shell que estava no diretório /etcShell anterior cujo diretório corrente era /home/meudir. Faça outros testes usando cd, e ls para você firmar o conceito. Agora que já conhecemos estes conceitos veja só este exemplo: $ mail suporte « FIM http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html >Ola suporte, hoje as ’date"+%hh:mm"’ >ocorreu novamente aquele problema >que eu havia reportado por >telefone. Conforme seu pedido >ai vai uma listagem dos arquivos >do diretorio: >’ls -l’ >Abracos a todos. >FIM Finalmente, agora, temos conhecimento para mostrar o que havíamos conversado sobre here document. Os comandos entre crases (‘) serão priorizados e, portanto, o Shell os executará an- tes da instrução mail. Quando o suporte receber o e-mail, verá que os comandos date e ls foram executados imediatamente antes do comando mail, recebendo então uma fotografia do ambiente no momento em que a correspondência foi enviada. 45
  • 47. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF O prompt primário default do Shell, como vimos, é o cifrão ($), porém o Shell usa o conceito de prompt secundário, ou de continuação de comando que é enviado para a tela quando há uma quebra de linha e a instrução não terminou. Esse prompt, é representado por um sinal de maior (>), que vemos precedendo a partir da 2ª linha do exemplo. Para finalizar e bagunçar tudo, devo dizer que existe uma construção mais moderna que vem sendo utilizada como forma de priorização de execução de comandos, tal qual as crases (‘). São as construções do tipo $(cmd), onde cmd é um (ou vários) comando que será(ão) executado(s) com prioridade em seu contexto. Assim sendo, o uso de crases (‘) ou construções do tipo $(cmd) servem para o mesmo fim, po- rém para quem trabalha com sistemas operacionais de diversos fornecedores (multiplataforma), aconselho o uso das crases já que o $(cmd) não foi portado para todos os sabores de Shell. Aqui dentro do Botequim, usarei ambas as formas, indistintamente. Vejamos novamente o exemplo dado para as crases sob esta nova ótica: $ echo Existem $(who | grep wc -l) usuários conectados Existem 8 usuários conectados Veja só este caso: $ Arqs=ls $ echo $Arqs ls Neste exemplo, eu fiz uma atribuição (=) e executei uma instrução. O que eu queria era que a variável $Arqs, recebesse a saída do comando ls. Como as instruções de um script são interpre- tadas de cima para baixo e da esquerda para a direita, a atribuição foi feita antes da execução do ls. Para fazer o que desejamos é necessário que eu priorize a execução deste comando em detrimento da atribuição e isto pode ser feito de qualquer uma das maneiras a seguir: $ Arqs=’ls’ ou: $ Arqs=$(ls) Para encerrar este assunto, vamos ver só mais um exemplo. Digamos que eu queira colocar dentro da variável $Arqs a listagem longa (ls -l) de todos os arquivos começados por arq e segui- dos de um único caractere (?). Eu deveria fazer: $ Arqs=$(ls -l arq?) ou: $ Arqs=’ls -l arq?’ Mas veja: 46
  • 48. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF $ echo $Arqs -rw-r–r– 1 jneves jneves 19 May 24 19:41 arq1 -rw-r–r– 1 jneves jneves 23 May 24 19:43 arq2 -rw-r–r– 1 jneves jneves 1866 Jan 22 2003 arql - Pô, saiu tudo embolado! - Pois é cara, como eu já te disse, se você deixar o Shell "ver"os espaços em branco, sempre que houver diversos espaços juntos, eles serão trocados por apenas um. Para que a listagem saia bonitinha, é necessário proteger a variável da interpretação do Shell, assim: $ echo "$Arqs" -rw-r–r– 1 jneves jneves 19 May 24 19:41 arq1 -rw-r–r– 1 jneves jneves 23 May 24 19:43 arq2 -rw-r–r– 1 jneves jneves 1866 Jan 22 2003 arql - Olhe, amigo, vá treinando esses exemplos, porque, quando nos encontrarmos novamente, vou lhe explicar uma série de instruções típicas de programação Shell. Tchau! Ahh! Só mais uma coisinha que eu ia esquecendo de lhe dizer. Em Shell, o "jogo da velha"(#) é usado quando de- sejamos fazer um comentário. $ exit # pede a conta ao garcon 47
  • 49. Capítulo 6 Parte II 6.1 Diálogo - Garçom! Traz um "chops"e dois "pastel". O meu amigo hoje não vai beber por que ele final- mente esta sendo apresentado a um verdadeiro sistema operacional e ainda tem muita coisa a aprender! - E então, amigo, tá entendendo tudo que te expliquei até agora? - Entendendo eu tô, mas não vi nada prático nisso... - Calma rapaz, o que te falei até agora, serve como base ao que há de vir daqui pra frente. Vamos usar estas ferramentas que vimos para montar programas es- truturados, que o Shell permite. Você verá porque até na TV já teve programa chamado "O Shell é o Limite". - Para começar vamos falar dos comandos da família grep. - grep? Não conheço nenhum termo em inglês com este nome... - É claro, grep é um acrônimo Global Regular Expres- sion Print, que usa expressões regulares para pesquisar a ocorrência de cadeias de caracteres na entrada definida (se bem que há uma lenda sobre como este comando foi nomeado: no editor de textos "ed", o avô do "vim", o comando usado para buscas era g/_expressao regular_/p, ou no inglês g/_re_/p.). Por falar em expressões regulares (ou regexp), o Aurélio Marinho Jargas tem todas as dicas em sua página (inclusive tutorias) que abordam o tema. Se você está mesmo a fim de aprender a programar em Shell, Perl, Python, ... Acho bom você ler estes artigos para te ajudar no que está para vir. Pergunta: O grep é um aplicativo para linha de comando que faz buscas no conteúdo dos arqui- vos. Aceita expressões regulares e ao utilizá-las no grep é recomendado utilizar escapes "¨para caracteres como "*"para que o bash não o entenda como um curinga para nomes de arquivos. A definição dada está correta? 6.2 Eu fico com o grep, você com a gripe Esse negócio de gripe é brincadeira! É só um pretexto para pedir umas caipirinhas. Mas voltando à vaca fria, eu te falei que o grep procura cadeia de caracteres dentro de uma entrada definida, mas o que vem a ser uma "entrada definida"? Bem, existem várias formas de definir a entrada do comando grep. Vejamos: Pesquisando em um arquivo: $ grep rafael /etc/passwd Pesquisando em vários arquivos: $ grep grep *.sh 48
  • 50. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Pesquisando na saída de comando: $ who | grep Pelegrino No 1º exemplo, o mais simples, procurei a palavra rafael em qualquer lugar do arquivo /etc/passwd. Se quisesse procurá-la como um login name, isto é, somente no início dos registros deste arquivo, eu deveria fazer: $ grep '^rafael’ /etc/passwd E para que serve este circunflexo e os apóstrofos? O circunflexo (^), se você tivesse lido os artigos anteriores sobre expressões regulares que te falei, saberia que servem para limitar a pesquisa ao início de cada linha, e os apóstrofos (’) servem para o Shell não interpretar este circunflexo, deixando-o passar incólume para o comando grep. O grep aceita como entrada, a saída de outro comando redirecionado por um pipe (isto é muito comum em Shell e é um tremendo acelerador de execução de comando já que atua como se a saída de um programa fosse guardada em disco e o segundo programa lesse este arquivo gerado), desta forma, no 3º exemplo, o comando who listou as pessoas "logadas"na mesma má- quina que você (não se esqueça jamais: o Linux é multiusuário) e o grep foi usado para verificar se o Pelegrino estava trabalhando ou "coçando". 6.3 A família grep Este comando grep é muito conhecido, pois é usado com muita freqüência, o que muitas pessoas desconhecem é que existem três comandos na família grep, que são: • grep; • egrep; • fgrep. A principais características diferenciais entre os 3 são: • O grep pode ou não usar expressões regulares simples, porém no caso de não usá-las, o fgrep é melhor, por ser mais rápido; • O egrep ("e"de extended, extendido) é muito poderoso no uso de expressões regulares. Por ser o mais lento da família, só deve ser usado quando for necessária a elaboração de uma expressão regular não aceita pelo grep; • O fgrep ("f"de fast, rápido, ou de "file", arquivo) como o nome diz é o rapidinho da família, executa o serviço de forma muito veloz (por vezes é cerca de 30% mais veloz que o grep e 50% mais que o egrep), porém não permite o uso de expressões regulares na pesquisa. Atenção: Tudo que foi dito acima sobre velocidade, só se aplica à família de comandos grep do Unix. No Linux o grep é sempre mais veloz, já que os outros dois (fgrep e egrep) são scripts em Shell que chamam o primeiro. 49
  • 51. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Agora que você já conhece as diferenças entre os membros da família, me diga: o que você acha dos três exemplos que eu dei antes das explicações? - Eu achei que o fgrep resolveria o teu problema de forma mais veloz do que o grep. - Perfeito! Tô vendo que você está atento! Está entendendo tudo que estou te explicando! Então vamos ver mais exemplos para clarear de vez as diferenças de uso dos membros da família. 6.4 Exemplos da família grep Exemplos http://www.redhat.com/docs/manuals/linux/RHL-7.2-Manual/custom-guide/rescuemode.html Eu sei que em um arquivo existe um texto falando sobre Linux só não tenho certeza se está escrito com L maiúsculo ou l minúsculo. Posso fazer de duas formas: $ egrep (Linux | linux) arquivo.txt ou $ grep [Ll]inux arquivo.txt No primeiro caso, a expressão regular complexa "(Linux | linux)"usa os parênteses para agru- par as opções e a barra vertical (|) como um "ou"lógico, isto é, estou procurando Linux ou linux. No segundo, a expressão regular [Ll]inux significa: começado por L ou l seguido de inux. Por esta expressão ser mais simples, o grep consegue resolvê-la, portanto acho melhor usar a se- gunda forma, já que o egrep tornaria a pesquisa mais lenta. Outro exemplo. Para listar todos os subdiretórios do diretório corrente, basta: $ ls -l | grep '^d’ drwxr-xr-x 3 root root 4096 Dec 18 2000 doc drwxr-xr-x 11 root root 4096 Jul 13 18:58 freeciv drwxr-xr-x 3 root root 4096 Oct 17 2000 gimp drwxr-xr-x 3 root root 4096 Aug 8 2000 gnome drwxr-xr-x 2 root root 4096 Aug 8 2000 idl drwxrwxr-x 14 root root 4096 Jul 13 18:58 locale drwxrwxr-x 12 root root 4096 Jan 14 2000 lyx drwxrwxr-x 3 root root 4096 Jan 17 2000 pixmaps drwxr-xr-x 3 root root 4096 Jul 2 20:30 scribus drwxrwxr-x 3 root root 4096 Jan 17 2000 sounds drwxr-xr-x 3 root root 4096 Dec 18 2000 xine No exemplo que acabamos de ver, o circunflexo (^) serviu para limitar a pesquisa à primeira posição da saída do ls longo. Os apóstrofos foram colocados para o Shell não "ver"o circunflexo (^). 50
  • 52. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Vamos ver mais um. Sabemos que as quatro primeiras posições possíveis de um ls -l de um arquivo comum (arquivo comum! Não é diretório, nem link, nem...) devem ser: . Assim sendo, para descobrir todos os arquivos executáveis em um determinado diretório eu de- veria fazer: $ ls -la | egrep '^-..(x|s)’ -rwxr-xr-x 1 root root 2875 Jun 18 19:38 rc -rwxr-xr-x 1 root root 857 Aug 9 22:03 rc.local -rwxr-xr-x 1 root root 18453 Jul 6 17:28 rc.sysinit Onde novamente usamos o circunflexo (^) para limitar a pesquisa ao início de cada linha, então as linhas listadas serão as que começam por um traço (-), seguido de qualquer coisa (o ponto quando usado como uma expressão regular significa qualquer coisa), novamente seguido de qualquer coisa, vindo a seguir um x ou um s. Obteríamos o mesmo resultado se fizéssemos: $ ls -la | grep '^-..[xs]' e agilizaríamos a pesquisa. 6.5 Vamos montar uma cdteca Vamos começar a desenvolver programas, acho que a montagem de um banco de dados de músicas é bacana para efeito didático (e útil nesses tempos de downloads de mp3 e "queima- dores"de CDs). Não se esqueça que, da mesma forma que vamos desenvolver um monte de programas para organizar os seus CDs de música, com pequenas adaptações, você pode fazer o mesmo com os CDs de software que vêm com a Linux Magazine e outros que você compra ou queima, disponibilizando este banco de software, desta forma ganhando muitos pontos com seu chefe. Para todos que trabalham com você (o Linux é multiusuário, e como tal deve ser explo- rado). - Espera! De onde eu vou receber os dados dos CDs? - Inicialmente, vou lhe mostrar como o seu programa pode receber parâmetros de quem o estiver executando e em breve, ensinarei a ler os dados pela tela ou de um arquivo. 6.6 Passando parâmetros O layout do arquivo músicas será o seguinte: 51
  • 53. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF nome do álbum^intérprete1~nome da música1:..:intérprete~nome da música isto é, o nome do álbum será separado por um circunflexo (^) do resto do registro, que é formado por diversos grupos compostos pelo intérprete de cada música do CD e a respectiva música in- terpretada. Estes grupos são separados entre si por dois-pontos (:) e internamente, o intérprete será separado por um til (~) do nome da música. Eu quero escrever um programa que chamado musinc, incluirá registros no meu arquivo musicas. Eu passarei o conteúdo de cada álbum como parâmetro na chamada do programa fazendo assim: $ musinc "álbum^interprete~musica:interprete~musica:..." Desta forma o programa musinc estará recebendo os dados de cada álbum como se fosse uma variável. A única diferença entre um parâmetro recebido e uma variável é que os primeiros re- cebem nomes numéricos (nome numérico fica muito esquisito, né? O que quis dizer é que seus nomes são formados por um e somente um algarismo), isto é $1, $2, $3, ..., $9. Vamos, antes de tudo, fazer um teste: Exemplos $ cat teste #!/bin/bash # Programa para testar passagem de parametros echo "1o. parm -> $1" echo "2o. parm -> $2" echo "3o. parm -> $3" Vamos executá-lo: $ teste passando parametros para testar bash: teste: cannot execute Ops! Esqueci-me de torná-lo executável. Vou fazê-lo de forma a permitir que todos possam executá-lo e em seguida vou testá-lo: $ chmod 755 teste $ teste passando parametros para testar 1o. parm -> passando 2o. parm -> parametros 3o. parm -> para Repare que a palavra testar, que seria o quarto parâmetro, não foi listada. Isto deu-se justa- mente porque o programa teste só listava os três primeiros parâmetros. Vamos executá-lo de outra forma: $ teste "passando parametros"para testar 1o. parm -> passando parametros 52