Escolar Documentos
Profissional Documentos
Cultura Documentos
e
Programao em Script-Shell
PET
TELE )))
Universidade Federal Fluminense
Niteri-RJ
2004
Prefcio
O Programa de Educao Tutorial (PET) possui como objetivo maior realizar atividades de pesquisa,
ensino e extenso de forma no dissociada, isto , desenvolver projetos que integrem em si estes trs
aspectos. Neste contexto, o grupo PET-Tele desenvolve diversas apostilas, no como um m em si
mesmas, mas como forma de realizar tambm outras atividades.
O desenvolvimento dessas apostilas iniciado com um trabalho de pesquisa sobre o tema escolhido.
Aps este perodo inicial, produz-se material didtico sobre o assunto, visando transmitir o conhecimento adquirido para os alunos do curso de graduao e outros interessados. Eventualmente, quando
ocorre alguma solicitao, os alunos do grupo fornecem cursos sobre os assuntos abordados na apostila.
At o momento, as seguintes apostilas esto disponveis no site do PET:
LaTeX Sistema de edio de texto largamente utilizado em meios acadmicos e cientcos, bem como
por algumas editoras nacionais e internacionais.
A segunda contm os aspectos bsicos do Linux, assim como os principais comandos utilizados
para realizar tarefas no Linux.
A ltima parte da apostila envolve os principais conceitos de programao utilizando o shell do
Linux.
O principal motivo da abordagem desses 3 temas em uma nica apostila foi o de levar o usurio
iniciante a ter uma viso mais ampla do funcionamento de um sistema operacional quando um comando
digitado na tela de um terminal ou quando executado um script.
No se pretende com este manual apresentar todos os comandos do Linux e suas aplicaes mais
usadas. Cada usurio usar mais um conjunto de comandos do que outros dependendo de seus
objetivos. Existem comandos especcos para redes, para manipulao de arquivos, para congurao
de dispositivos, etc. Um livro seria pouco para esgotar todas as facilidades e funes que o Linux
oferece.
Espera-se que com essa apostila o usurio iniciante conhea o bsico do Linux de forma clara e o
usurio mais experiente a use como referncia.
Quanto ao aspecto de programao, vale lembrar que um usurio no se tornar um grande programador apenas lendo uma apostila ou um livro. preciso prtica, fazer programas, testar funes,
estudar programas prontos para entender seu funcionamento, etc. Uma grande vantagem do Linux
que suas distribuies vm com os scripts abertos, para que o usurio possa ler, entender e adaptar
s suas necessidades, podendo at mesmo fazer uma nova distribuio com base na outra. Bastando
para isso, vontade de aprender e curiosidade. As man pages do Unix e dos interpretadores de comandos como o bash possuem tudo o que for necessrio para entender os comandos de uma forma mais
completa.
No m da apostila, se encontra um guia de sites, livros e apostilas usados como base para a
construo desta. E outras referncias importantes contendo um amplo e importante contedo para
o leitor usar am de aprimorar seu conhecimento no Linux e programao utilizando o shell.
ii
PETTELE)))
Sumrio
Prefcio
1 Conceitos Gerais
1.1
1.2
1.3
Introduo ao Hardware . . . . . . . . . . . . . . . . . . . . . . .
1.1.1 Resoluo de problemas X Mapeamento de domnios . . .
1.1.2 Funes lgicas e aritmticas bsicas . . . . . . . . . . . .
1.1.3 Implementao de funes matemticas por circuitos . . .
1.1.4 Computador X Mquina de nveis . . . . . . . . . . . . . .
Introduo ao software . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1 Computador X Sistema Operacional . . . . . . . . . . . .
1.2.2 Interface de comunicao com o Sistema Operacional (SO)
1.2.3 Interpretador de comandos (shell ) de um SO . . . . . . . .
Famlia UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.1 Sistemas UNIX . . . . . . . . . . . . . . . . . . . . . . . .
1.3.2 Interfaces do UNIX . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2 Introduo ao Linux
2.1
2.2
2.3
3 Comandos
3.1
3.2
Comandos de ajuda . . . . . . . . . . . . . . .
Comandos e utilitrios bsicos . . . . . . . . .
3.2.1 Comandos de manipulao de arquivos
3.2.2 Redirecionamento de entrada e sada .
iii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
2
2
3
3
4
4
5
5
5
5
7
10
10
10
10
11
11
11
11
12
12
14
15
15
16
18
18
19
19
34
Sumrio
3.3
Sumrio
Expresses Regulares e Metacaracteres . . . . . . . . . . . . . . . . . . . . . . . . . .
Aspectos bsicos . . . . . . . . . . . . . .
4.1.1 Script e Script Shell . . . . . . . .
Execuo do programa . . . . . . . . . . .
4.2.1 Erros na execuo . . . . . . . . . .
4.2.2 Quoting . . . . . . . . . . . . . . .
Comentrios . . . . . . . . . . . . . . . . .
Impresso na tela . . . . . . . . . . . . .
Passagem de parmetros e argumentos . .
4.5.1 Leitura de parmetros . . . . . . .
Funes . . . . . . . . . . . . . . . . . . .
4.6.1 Execuo de script por outro script
Depurao . . . . . . . . . . . . . . . . . .
5 Manipulao de variveis
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
Palavras Reservadas . .
Criao de uma varivel
Deleo de uma varivel
Visualizao de variveis
Proteo de uma varivel
Substituio de variveis
Variveis em vetores . .
Variveis do sistema . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Cdigo de retorno . . . .
Avaliao das expresses
Operadores booleanos . .
Testes Numricos . . . .
6.4.1 O Comando let
Testes de Strings . . . .
Testes de arquivos . . . .
7 Controle de uxo
7.1
7.2
7.3
Deciso simples . . . . .
Deciso mltipla . . . .
7.2.1 O comando case
Controle de loop . . . . .
7.3.1 While . . . . . .
7.3.2 Until . . . . . . .
7.3.3 For . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
iv
44
46
46
46
47
48
48
49
50
51
53
55
57
59
60
60
60
62
62
62
62
63
63
66
66
66
67
67
68
69
71
72
72
73
73
74
74
75
75
78
78
PETTELE)))
Sumrio
Sumrio
B Editor de textos vi
B.1 Comandos internos - vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
B.2 Comandos da ltima linha - vi . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Referncias Bibliogrcas
80
80
81
82
PETTELE)))
Captulo 1
Conceitos Gerais
1.1 Introduo ao Hardware
1.1.1 Resoluo de problemas X Mapeamento de domnios
Como j foi visto em outras disciplinas, possvel descrever situaes atravs de equaes. Por
exemplo, na Fsica, temos as leis da natureza mapeadas por equaes, permitindo que antecipemos
os resultados. Conhecendo a equao que descreve o problema, que pode estar em um domnio
complicado, podemos transport-la para outro domnio mais simples (que j pode ter uma soluo
conhecida), onde obtemos resultados que podem ser levados de volta ao domnio inicial. A resoluo
do problema pode ser denida em quatro etapas:
1. Mapeamento do problema real em um problema matemtico;
2. Equacionamento do problema matemtico;
3. Mapeamento do equacionamento em um algoritmo;
4. Adequao do algoritmo a uma linguagem de programao.
B
0
1
0
1
AND
0
0
0
1
OR
0
1
1
1
XOR
0
1
1
0
NAND
1
1
1
0
NOR
1
0
0
0
XNOR
1
0
0
1
NOT A
1
1
0
0
PETTELE)))
Nvel 2 - Nvel de mquina convencional. Contm o conjunto de instrues que sero interpretados pelo microprograma.
Nvel 3 - um nvel hbrido pois possui instrues do nvel 2 e outras caractersticas novas.
chamado de sistema operacional.
Nvel 4 - Nvel de montagem.
Nvel 5 - Contm as linguagens usadas pelos programadores para resolver programas.
Nvel 6 - Consiste nos programas feitos para trabalhar em determinada aplicao. Ex: editores
de texto, simuladores matemticos, eltricos, etc.
PETTELE)))
Interativa: os comandos so digitados no prompt de comando e passados ao interpretador de comandos um a um. Neste modo, o computador depende do usurio para executar uma tarefa ou
prximo comando.
No-interativa: so usados arquivos de comandos criados pelo usurio (scripts ) para o computador
Histrico do UNIX
Abaixo temos um cronograma da criao do UNIX:
Dcadas de 40 e 50:
Todos os computadores eram pessoais quanto a forma de utilizao. O usurio reservava um
horrio para utiliz-lo.
Dcada de 60:
Atravs dos sistemas Batch , o usurio enviava ao centro de processamento de dados um job
em cartes perfurados para que esse fosse processado pelo computador. Aproximadamente uma
Universidade Federal Fluminense
PETTELE)))
hora depois da submisso, o usurio podia buscar os resultados de seu programa. Porm, se
houvesse algum erro no programa escrito, o usurio s saberia horas depois, perdendo seu tempo.
Para resolver esse problema, foi criado um sistema de compartilhamento de tempo, o CTSS, no
MIT, onde cada usurio tinha um terminal on-line sua disposio.
Aps o CTSS, os Laboratrios Bell com o MIT e a General Eletric comearam um programa
grandioso de criar um novo sistema operacional que suportasse centenas de usurios simultaneamente em regime de compartilhamento de tempo (timesharing ). Tal sistema foi denominado
MULTICS (MULTiplexed Information and Computing Service), que seria multi-usurio, multitarefa e teria um sistema de arquivos hierrquico.
Dcada de 70:
A AT&T, controladora da Bell Labs, insatisfeita com o progresso do MULTICS cortou o projeto
e alguns programadores da Bell que trabalharam no projeto, como Ken Thompson, implementaram a verso monousurio do MULTICS em linguagem de montagem em um minicomputador,
o PDP-7. Brian Kernighan, outro programador da Bell, deu o nome do novo sistema de UNICS
como deboche ao nome do sistema anterior. Mais tarde o nome foi mudado para o conhecido
UNIX.
Em seguinda, o UNIX foi escrito para mquinas do tipo PDP-11. E como era necessrio reescrever o sistema toda vez que ele fosse transportado para outra mquina, Thompson reescreveu
o UNIX em uma linguagem de alto nvel desenvolvida por ele, a Linguagem B. Para corrigir
algumas imperfeies, Denni Ritchie, que tambm trabalhava na Bell Labs, desenvolveu a Linguagem C. Juntos, em 1973, eles reescreveram o UNIX em C. Dessa forma, foi garantida a
portabilidade.
Em 1974, Thompson e Ritchie publicaram um artigo sobre o novo sistema operacional UNIX,
o que gerou um grande entusiasmo no meio acadmico. Como a AT&T era um monoplio
controlado atuante na rea das telecomunicaes, no foi permitida sua entrada no ramo da
computao. Assim, a Bell Labs no colocou objees para licenciar o UNIX para as universidades e empresas.
Em 1977 existiam cerca de 500 computadores com UNIX no mundo todo.
Pelo fato do UNIX ser fornecido com seu cdigo fonte completo, muitas pessoas passaram a
estud-lo e organizar seminrios para trocas de informaes, visando a eliminao de Bugs e
incluso de melhoramentos. A primeira verso padro do UNIX foi denominda Verso 6 pois
estava descrita na sexta edio do Manual do Programador UNIX.
Dcada de 80:
Com a diviso da AT&T em vrias companhias independentes, imposta pelo gorverno americano
em 1984, foi possvel a criao de uma subsidiria dela no ramo da computao. Ento foi
lanado pela AT&T a primeira verso comercial do UNIX, o System III, seguida pelo System
V , sendo que cada verso era maior e mais complicada que a antecessora.
Auxiliada pela DARPA (Defense Advanced Research Projects Agency ), a Universidade de Berkeley passou a distribuir uma verso melhorada da Verso 6, chamada 1BSD (First Berkeley Software Distribution ), seguida pela 2BSD, 3BSD e 4BSD. Esta ltima possuindo muitos melhoramentos, sendo o principal, o uso de memria virtual e da paginao, permitindo que programas
PETTELE)))
fossem maiores que a memria fsica. Tambm, a ligao de mquinas UNIX em rede, desenvolvida em Berkeley, fez com que o padro de rede BSD, o TCP/IP, se tornasse padro universal.
Essas modicaes zeram com que fabricantes de computadores, como a Sun Microsystems e
a DEC, baseassem suas verses no UNIX de Berkeley.
Em 1984 j existiam cerca de 100.000 computadores com UNIX rodando em diferentes plataformas.
No nal da dcada, estavam circulando duas verses diferentes e incompatveis, a 4.3BSD e o
System V Release 3. Isso tornou praticamente impossvel aos fornecedores de software ter a
certeza de que seus programas pudessem rodar em qualquer sistema UNIX.
Ento, o Comit de Padronizao do IEEE fez a primeira tentativa de unicao dos dois
padres. O nome escolhido do projeto foi POSIX (Portable Operating System). Foi criado
aps grandes discusses o padro denominado 1003.1, contendo a interseo das caractersticas
tanto da 4.3 BSD quanto do System V. Porm, um consrcio, denominado OSF (Open Software
Foundation ), foi formado principalmente pela IBM (que comercializava o sistema AIX ), DEC,
Hewlett-Packard com o intuito de formar um sistema de acordo com o padro 1003.1, alm de
caractersticas adicionais. Em reao, em 1988 a AT&T e Sun se unem no consrcio UI (UNIX
International) para desenvolver Solaris e UNIXWare.
Com isso, passaram a existir, novamente, verses diferentes oferecidas pelos consrcios, tendo
como caracterstica comum o fato de serem grandes e complexas, contrariando a idia principal
do UNIX
Uma tentativa de fuga desses sistemas foi a criao de uma nova verso UNIX-like mais simples
e menor, o sistema do tipo MINIX.
PETTELE)))
Captulo 2
Introduo ao Linux
Diferentemente do que se levado a pensar, o Linux uma implementao independente do sistema
operacional UNIX. O Linux propriamente dito um kernel, no um sistema operacional completo.
Sistemas completos construdos em torno do kernel do Linux usam o sistema GNU que oferece um
shell, utilitrios, bibliotecas, compiladores e ferramentas, bem como outros programas como os editores
de texto. Por essa razo, Richard M. Stallman, do projeto GNU, pede aos usurios que se reram ao
sistema completo como GNU/Linux. No apndice, h mais informaes sobre o projeto GNU.
O desenvolvimento do Linux iniciou a partir de um projeto pessoal de um estudante da Univeridade
de Helsinki, na Finlndia, chamado Linus Torvalds. Ele pretendia criar um sistema operacional mais
sosticado do que o Minix, um UNIX relativamente simples cujo cdigo fonte ele tinha disponvel. O
Linux obedece ao padro estabelecido pelo governo norte americano, POSIX. O POSIX o padro da
API (Application Programming Interface ) UNIX, referncias para desenvolvedores da famlia UNIXlike. Desde a apresentao do Linux em 5 de outubro de 1991, por Linus Torvalds, um grande nmero
de pessoas envolvidas com programao comeou a desenvolver o Linux. O nome Linux deriva da
juno Linus + UNIX = Linux.
Portabilidade
Linux hoje um dos kernels de sistema operacional mais portados, rodando em sistemas desde o
iPaq (um computador porttil) at o IBM S/390 (um massivo e altamente custoso mainframe), embora
este tipo de portabilidade no fosse um dos objetivos principais de Linus Torvalds. Seu esforo era
tornar seu sistema porttil no sentido de ter habilidade de facilmente compilar aplicativos de uma
variedade de fontes no seu sistema. Portanto, o Linux originalmente se tornou popular em parte
devido ao esforo para que as fontes GPL ou outras favoritas de todos rodassem no Linux.
Distribuies
O sistema operacional completo (GNU/Linux) considerado uma Distribuio Linux. uma
coleo de softwares livres (e s vezes no-livres) criados por indivduos, grupos e organizaes ao redor
do mundo, e tendo o kernel como seu ncleo. Atualmente, companhias como a Red Hat, a SuSE,a
MandrakeSoft ou a Conectiva, bem como projetos de comunidades com a Debian ou a Gentoo,
compilam o software e fornecem um sistema completo, pronto para instalao e uso. Alm disso, h
projetos pessoais como o de Patrick Volkerding que fornece uma distribuio Linux, a Slackware e
Carlos E. Morinoto que lanou a distribuio chamada Kurumin. Est ltima roda em CD, bastando
as conguraes do computador aceitarem o boot pelo drive do CD.
8
Logo que Linus Torvalds passou a disponibilizar o Linux, ele apenas disponibilizava o Kernel com alguns comandos bsicos. O prprio usurio devia arrumar os outros programas, compil-los e congurlos. Para evitar esse trabalho, comeou ento a disponibilizao de programas pr-compilados para
o usurio apenas instalar. Foi assim que surgiu a MCC (Manchester Computer Centre), a primeira
distribuio Linux, feita pela Universidade de Manchester. Algumas distribuies so maiores, outras
menores, dependendo do nmero de aplicativos e sua nalidade. Algumas distribuies de tamanhos
menores cabem em um disquete com 1,44 MB, outras precisam de vrios CDs. Todas elas tem seu
pblico e sua nalidade, as pequenas (que ocupam poucos disquetes) so usadas para recuperao de
sistemas danicados ou em monitoramentos de redes de computadores. O que faz a diferena como
esto organizados e pr-congurados os aplicativos.
Startup e shutdown
grupos, que permitem acesso a arquivos que pertencem ao grupo correspondente. Por padro, o
grupo de usurios inicial o mesmo de seu nome de usurio. A identicao do grupo chamada
de gid (group id ).
PETTELE)))
As permisses de acesso para donos, grupos e outros usurios so independentes uma das outras,
permitindo assim um nvel de acesso diferenciado.
A conta root tambm chamada de super usurio. Este um login que no possui restries de
segurana. A conta root somente deve ser usada para fazer a administrao do sistema. Utilize a
conta de usurio normal ao invs da conta root para operar seu sistema. Uma razo para evitar usar
privilgios root devido facilidade de se cometer danos irreparveis ao sistema.
10
PETTELE)))
Arquivos comuns: Usados para armazenar dados. Os usurios podem acrescentar dados
diretamente em arquivos comuns, como, por exemplo, atravs de um editor. Os programas
executveis tambm so guardados como arquivos comuns.
Arquivos de diretrio: Um arquivo de diretrio contm uma lista de arquivos. Cada insero
na lista consiste em duas partes: o nome do arquivo e um ponteiro para o arquivo real em disco.
Por outro lado, os diretrios se comportam exatamente como arquivos comuns, exceto pelo fato
de que alguns comandos usados para manipulao de arquivos comuns no funcionarem para
arquivos de diretrio.
Arquivos especiais: Estes arquivos so usados para fazer referncia a dispositivos fsicos como
os terminais, as impressoras, os discos. Eles so lidos e gravados como arquivos comuns, mas
tais associaes causam a ativao do dispositivo fsico ligado a ele.
O Linux case sensitive, ou seja, ele diferencia letras maisculas e minsculas nos arquivos. O
diretrio, como qualquer outro arquivo, tambm case sensitive. Em um mesmo diretrio, no podem
existir dois arquivos com o mesmo nome ou um arquivo com mesmo nome de um subdiretrio. Os
diretrios no Linux so especicados por uma "/".
OBS: Estamos habituados a ver os nomes de arquivos como sendo: nome.ext, onde ext a extenso
do tipo de arquivo, por exemplo .txt, .html, .doc. Porm, no Linux os nomes no precisam seguir
essa regra. Os nomes podem podem ser formados por vrias extenses, como: lista.ord.txt,
nomes.maius.classe, livros.meu.ord.txt.
O Linux organiza seu lesystem atravs de inodes. Inodes so estruturas de dados em disco que
descrevem e armazenam os atributos do arquivo, incluindo sua localizao. Campos de um inode : user,
group, tipo do arquivo, tempo de criao, acesso, modo (modicao), nmero de links, tamanho e
endereo no disco.
Existem mecanismos que permitem que vrios lenames reram-se a um nico arquivo no disco.
Esses mecanismos so os links. Existem dois tipos de links : hard link (ou simblico) ou soft link.
hard link : associa dois ou mais lenames como mesmo inode. Os hard links compartilham o
mesmo bloco de dados embora funcionando como entradas de diretrio independentes.
soft link : estes so pointers les que apontam para outro lename no lesystem.
11
PETTELE)))
para isso. Porm esse usurio no pode restringir ou permitir o acesso ao arquivo. Os usurios que
no so nem proprietrios nem pertenam a um grupo que tenha acesso ao arquivo formam a ltima
categoria, conhecida simplesmente como "outros".
User
r w -
Group
r - -
Others
r - -
Para alterar essas permisses, utliza-se o comando chmod. Veja explicao do uso desse comando
no prximo captulo.
2.2.4 Diretrios
Chamamos de rvore de diretrios organizao dos arquivos de diretrios, fazendo uma aluso s
suas ramicaes, semelhantes aos galhos de uma rvore. Damos o nome de "raiz " ao diretrio
principal que contm todos os outros subdiretrios.
12
PETTELE)))
13
PETTELE)))
2.3. Processos
2.3 Processos
2.3.1 Processos e subprocessos
Um processo um simples programa que est rodando em seu espao de endereamento virtual prprio.
distinto de um 'job ' ou comando, que, em sistemas UNIX, pode ser composto de muitos processos
realizando uma nica tarefa. Comandos simples como `ls' so executados como simples processos. Um
comando composto, contendo pipes, ir executar um processo por segmento pipe. Para acompanhar o
status de cada processo o sistema cria um PID (Process ID) para cada processo aberto.
Existem elementos chamados guias de controle de execuo que ajudam a controlar a execuo do
programa.
Fork : a chamada de sistema cuja execuo cria um processo (lho) idntico quele que o chamou.
Processo pai : processo que gera um novo processo.
Processo lho : Processo gerado pelo processo pai.
Pid (Process ID) : um nmero que identica unicamente cada processo e usado para referir-se
a ele.
14
PETTELE)))
2.3. Processos
#!/bin/bash
#Aviso
sleep 10m
echo T na Hora de Sair!!
date
Este programa emite um aviso aps 10 minutos de ter sido colocado para rodar, em seguida mostra
a data e a hora. No teria sentido deixar esse programa rodando travando o terminal enquanto voc
poderia estar fazendo outras coisas, ento ele pode ser colocado em background para liberar o terminal.
Aps 10 minuntos a mensagem aparece. O programa se chama trava.sh.
$ ./trava.sh &
[1] 2906
$ jobs
[1]+ Running
./trava.sh &
$ ps
PID TTY
TIME CMD
1916 ttyp1
00:00:00 bash
2906 ttyp1
00:00:00 trava.sh
2907 ttyp1
00:00:00 sleep
2909 ttyp1
00:00:00 ps
$
$ fg 1
./trava.sh
aqui foi digitado: ctrl + z
[1]+ Stopped
./trava.sh
$ jobs
[1]+ Stopped
./trava.sh
$ jobs
Universidade Federal Fluminense
15
PETTELE)))
2.3. Processos
[1]+ Stopped
./trava.sh
$ bg 1
[1]+ ./trava.sh &
$ jobs
[1]+ Running
./trava.sh &
$ ... comandos diversos do usurio enquanto ele espera a mensagem aparecer ...
$ T na Hora de Sair!!
Ter Jan 10 16:01:51 BRST 2006
aqui foi digitado: enter
[1]+ Done
./trava.sh
$ jobs
$ ps
PID TTY
TIME CMD
1916 ttyp1
00:00:00 bash
2935 ttyp1
00:00:00 ps
$
Como pode ser visto, o programa foi executado em background. O comando jobs mostrou o job
trava.sh em todos os seus estados: rodando, suspenso e executando, assim como fez o comando ps.
16
PETTELE)))
Captulo 3
Comandos
Os sistemas operacionais UNIX e os que so derivados do UNIX (FreeBSD, Linux, etc) possuem muitos
comandos e aplicativos. Em geral a sintaxe de uma comando da seguinte forma:
$ man -k palavra-chave
Outros comandos so: info, whatis, apropos. Consulte o manual para informaes sobre esses
comandos. .
apropos : procura por comandos/programas pela descrio
Sintaxe: apropos <descrio>
til quando precisamos fazer alguma coisa mas no sabemos qual comando usar. Ele faz sua
pesquisa nas pginas de manual e suas descries e lista os comandos/programas que atendem
consulta.
17
Captulo 3. Comandos
-n Numera as linhas.
-E Exibe $ ao nal de cada linha.
-A Exibe todo o contedo incluindo caracteres especiais, como acentos e espaos na forma de
cdigos.
Ex: Mostra o contedo do arquivo com as linhas numeradas.
$ cat -n arqu1.txt
1
2 "Software Livre" uma questo
3 de liberdade, no de preo.
4 Para entender o conceito,
5 voc deve pensar em
6 "liberdade de expresso",
7 no em "cerveja grtis".
8
Ex: Concatena na sada padro o contedo dos dois arquivos.
$ cat
arqu1.txt arqu2.txt
18
PETTELE)))
Captulo 3. Comandos
/usr/share/misc/magic ou /etc/magic
O segundo arquivo, /etc/magic, pode ser editado pelo prprio usurio para identicar seus
arquivos.
Ex:
$ file arqu1.txt
arqu1.txt: ISO-8859 text
$ file image.jpg
image.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI),
100 x 100 $ file h264 h264: directory
Pelo exemplo acima, vemos que os tipos de arquivos foram: text, image e directory. Alm desses
podem haver: executable, (para arquivos executveis resultado da compilao de um programa),
data (contendo dados geralmente no imprimveis).
Veja mais opes no manual do sistema.
19
PETTELE)))
Captulo 3. Comandos
$ cp arqu1.txt
$ ls -l
total 44
-rw-r--r--rw-r--r--rw-r--r--rw-r--r--rwxrwxrwx
-rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--
novoarq.txt
1
1
1
1
1
1
1
1
1
1
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
395
167
606
0
5684
167
5740
113
125
214
2005-03-08
2005-03-08
2005-03-08
2005-03-08
2005-03-05
2005-03-08
2005-03-08
2005-03-08
2005-03-08
2005-03-08
21:46
22:53
22:43
20:09
19:29
23:23
20:08
21:42
21:41
21:40
apend.tex
arqu1.txt
arqu2.txt
cap2.tex
imag.jpg
novoarq.txt
page.html
parIII.tex
parII.tex
parI.tex
Como pode ser visto no exemplo, foi criado um arquivo chamado novoarq.txt
-f Remove todos os arquivos mesmo no tendo permisso de escrita sem pedir conrmao
do usurio.
-i Remove o arquivo interativamente, ou seja, pede a conrmao do usurio.
Universidade Federal Fluminense
20
PETTELE)))
Captulo 3. Comandos
$ rm -i cap2.tex
rm: remove arquivo comum `cap2.tex'? y
$ ls
apend.tex arqu2.txt novoarq.txt parIII.tex
arqu1.txt imag.jpg page.html
parII.tex
$
parI.tex
Foi pedida conrmao para a excluso do arquivo, a letra y foi digitada para conrmar, em
seguida foi usado o comando ls para listar os arquivos. Como pode ser visto, o arquivo foi
apagado.
$mv
$mv
list.tex
$ls
apend.tex arqu2.txt nova.jpg
page.html
parII.tex
arqu1.txt list.tex novoarq.txt parIII.tex parI.tex
ln Cria links entre arquivos.
Sintaxe: ln [opo] arquivo1 arquivo2
Sem opo, o comando ln d um outro nome para um mesmo arquivo na memria. Ou seja,
um mesmo arquivo pode ser referenciado de duas maneiras diferentes.
J usando a opo -s criado um link simblico, ou seja, um arquivo que aponta para a rea
onde est o arquivo original.
Ex: Tendo o arquivo chamado arq2.txt, ser criado um link de hardware e simblico para
ele. Observe a diferena no tamanho dos arquivos criados. O link simblico apenas um
"atalho"para o arquivo original, por isso seu tamanho menor. Atente tambm para o fato do
uso do comando ln sem opo no igual ao comando cp como pode parecer, pois os arquivos
continuam interligados. A modicao de um implica na modicao do outro.
Universidade Federal Fluminense
21
PETTELE)))
Captulo 3. Comandos
$ ls -l
total 4
-rw-r--r-1 kurumin kurumin
$ ln original.txt hard.txt
$ ls -l
total 8
-rw-r--r-2 kurumin kurumin
-rw-r--r-2 kurumin kurumin
$ cat hard.txt
Esse o arquivo original
Primeira modificao
$ cat >> simb.txt
Segunda modificao
$ cat simb.txt
Esse o arquivo original
Primeira modificao
Universidade Federal Fluminense
22
PETTELE)))
Captulo 3. Comandos
Segunda modificao
$ cat original.txt
Esse o arquivo original
Primeira modificao
Segunda modificao
$
diff Exibe a diferena entre dois arquivos.
Sintaxe: di [opo] arquivo1 arquivo2
Algumas das opes so:
$ cat parI.tex
parte um
esta linha esta igual nos dois
mas a linha seguinte no.
$ cat parII.tex
parte dois
esta linha esta igual nos dois
porem a linha seguinte no
$ diff parI.tex parII.tex
1c1
< parte um
--> parte dois
3c3
< mas a linha seguinte no.
--> porem a linha seguinte no
$
Universidade Federal Fluminense
23
PETTELE)))
Captulo 3. Comandos
$ ls -l
--wx-wx-wx
1 ze ze
5684 2005-03-05 19:29 nova.jpg
$ chmod -c a+rwx
modo de `nova.jpg' mudado para 0777 (rwxrwxrwx)
$ chmod -c og-x nova.jpg
modo de `nova.jpg' mudado para 0766 (rwxrw-rw-)
A mudana de permisso tambm pode ser feita colocando o cdigo rwx na forma de nmeros
octais. Abaixo segue a equivalncia do cdigo nas letras rwx pra nmeros.
----x
-w-wx
r-r-x
rwrwx
0
1
2
3
4
5
6
7
$ ls -l parI.tex
-r--r--r-1 kurumin
$ chmod 754 parI.tex
$ ls -l parI.tex
-rwxr-xr-1 kurumin
kurumin
kurumin
24
PETTELE)))
Captulo 3. Comandos
$ ls
apend.tex
arqu1.txt
arqu2.txt imag.jpg
cap2.tex page.html
parIII.tex
parII.tex
parI.tex
$ ls -la
total 48
drwxr-xr-x
drwxr-xr-x
-rw-r--r--rw-r--r--
2
31
1
1
ze
ze
ze
ze
25
PETTELE)))
Captulo 3. Comandos
-rw-r--r--rw-r--r--rwxrwxrwx
-rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1
1
1
1
1
1
1
ze
ze
ze
ze
ze
ze
ze
ze
ze
ze
ze
ze
ze
ze
1188
0
5684
5740
113
125
214
2005-03-08
2005-03-08
2005-03-05
2005-03-08
2005-03-08
2005-03-08
2005-03-08
21:36
20:09
19:29
20:08
21:42
21:41
21:40
arqu2.txt
cap2.tex
imag.jpg
page.html
parIII.tex
parII.tex
parI.tex
total 48 o nmero de blocos ocupados pelos arquivos no diretrio. Em algumas verses o tamanho
de cada bloco de 512 Bytes e em outras de 1K Byte.
soluto de localizao.
Sintaxe: pwd
$ pwd
/home/ze/teste
cd(change directory ) : Troca de diretrio corrente
Sintaxe: cd <diretrio>
Exemplo:
26
PETTELE)))
Captulo 3. Comandos
$ pwd
/home/ze/teste
Fazendo
$ cd /usr/bin
$ pwd
/usr/bin
Vale a pena testar as vrias opes deste comando, pois, conhecendo alguns atalhos, ele agiliza
a navegao dentro do sistema. Veja a seo 3.3. Nela podem ser encontrados os caracteres
especiais mais usados.
$ ls
curso
notas
artigos
$ mkdir teste
$ ls
curso
notas
artigos
teste
rmdir : Remove diretrios vazios
Sintaxe: rmdir <diretrio>
Exemplo: O diretrio teste criado no exemplo anterior ser removido.
$ rmdir teste
$ ls
urso
notas
artigos
27
PETTELE)))
Captulo 3. Comandos
$ su
Password:
#
$ su user
Password:
/home/user$
sudo : Executa comandos como root.
adduser : Adiciona um usurio ou grupo no sistema
Sintaxe: adduser [opes] <usurio/grupo>
Por padro, quando um usurio adicionado, criado um grupo com o mesmo nome do usurio.
28
PETTELE)))
Captulo 3. Comandos
Comandos diversos
alias : Cria um apelido para o comando e seus parmetros
Sintaxe: alias <apelido>=`<comando + parmetros>'
Exemplo: Ser criado um apelido para aprimorar o ls
cd/mnt/floppy'
$cal 6 2000
$cal 2000
Algumas opes podem ser usadas atravs da sintaxe: cal [opo]
29
PETTELE)))
Captulo 3. Comandos
$ date mes/dia/hora/minuto/ano
Ento para mudar a data atual para 25 de dezembro de 2020, s duas e meia da tarde, digite:
$ date 122514302020
df (disk free ) : Mostra o espao livre no disco
Sintaxe: df [opes] ,
onde opes podem ser os parmetros listados abaixo:
du (disk usage ) : Mostra o espao utilizado por arquivos e diretrios do diretrio atual
Sintaxe: du [opes] ,
onde opes podem ser os parmetros listados abaixo:
30
PETTELE)))
Captulo 3. Comandos
$find / -name prova ( procura no diretrio raiz e subdiretrios um arquivo chamado prova)
$find / -name prova -maxdepth 3 (procura no diretrio raiz e subdiretrios, at o 3 nvel,
um arquivo chamado prova)
$find / -mmin 10'' (procura no diretrio raiz e subdiretrios um arquivo modicado h 10
minutos atrs)
$find / -links 4'' (procura no diretrio raiz e subdiretrios, todos os arquivos que possuem
4 links como referncia)
sync : Grava os dados do cache de disco na memria RAM para os disco rgidos e
exveis
Sintaxe: sync
O cache um mecanismo de acelerao que permite que um arquivo seja armazenado na memria
ao invs de ser imediatamente gravado no disco. Quando o sistema estiver ocioso, o arquivo
gravado para o disco. O Linux pode usar toda memria RAM disponvel para o cache de
programas acelerando seu desempenho de leitura/gravao. O uso do sync til em disquetes
quando gravamos um programa e precisamos que os dados sejam gravados imediatamente para
retirar o disquete da unidade.
Opes de compactao
O Linux possui programas de armazenamento de arquivos que podem ou no compactar os mesmos.
tar : armazena vrios arquivos e diretrios dentro de um nico arquivo (*.tar) ou dis-
positivo
31
PETTELE)))
Captulo 3. Comandos
simb.txt
A m de reduzir o espao ocupado no disco, o uso da compactao deste arquivo se torna til e
eciente. Para esta tarefa usamos o comando gzip.
32
PETTELE)))
Captulo 3. Comandos
$ ls
arq1.txt arq2.txt hard.txt junto.tar.gz original.txt simb.txt
$ gunzip junto.tar.gz
$ ls
arq1.txt arq2.txt hard.txt junto.tar original.txt simb.txt
$
Existem outras opes de compactadores em sistemas UNIX. Cada um dene um arquivo com
uma extenso diferente, como os exemplos:
gunzip
unpack
uncompress
unbzip2
uzip
.gz
.z
.Z
.bz2
.zip
33
PETTELE)))
Captulo 3. Comandos
34
PETTELE)))
Captulo 3. Comandos
$
>
>
>
>
1
2
3
$
cat <<FIM
1 - Opo UM
2 - Opo DOIS
3 - Opo TRS
FIM
- Opo UM
- Opo DOIS
- Opo TRS
$cat nomes
Deri
Cod
Pato
Brunaldo
KK
$
$sort < nomes
Brunaldo
Cod
Deri
KK
Pato
$
A sada poderia ser redirecionada ao mesmo tempo para um arquivo, como mostrado abaixo:
nomesord
O sort leu o contedo do arquivo "nomes", classicou-os e a sada, que seria feita na tela, foi
jogada para um novo arquivo chamado "nomesord". Um detalhe importante: os arquivos de entrada
e sada devem ser diferentes, pois a primeira parte do comando a criao do arquivo de sada. Se
este for igual ao de entrada, ele zerado.
Universidade Federal Fluminense
35
PETTELE)))
Captulo 3. Comandos
Filtros
Os chamados programas "ltro "pegam sua entrada de stdin, fazem alguma modicao nesses dados
e colocam a sada em um stdout (tela do terminal).
O mais simples programa ltro o cat, que faz uma cpia el da entrada na sada. Outros
programas desse tipo so: sort, wc, que conta as linhas, caracteres e palavras, grep, que mostra as
linhas de um arquivo contendo uma seqncia de caracteres, e muitos outros comandos UNIX.
No so programas ltro: ls, who, date, cal, pois, embora a sada seja para stdout, a entrada no
stdin.
$ cat lista
Alexandre
Jos
Felipe
Tatiana
Beatriz
Eduardo
Enrico
Aline
Erica
Jos
$ uniq lista
Alexandre
Jos
Felipe
Tatiana
Beatriz
Eduardo
Enrico
Aline
Erica
Jos
$ sort lista | uniq
Alexandre
Aline
Beatriz
Eduardo
Enrico
Universidade Federal Fluminense
36
PETTELE)))
Captulo 3. Comandos
Erica
Felipe
Jos
Tatiana
$ sort lista | uniq -d
Jos
$
split : Divide o arquivo em partes.
As principais opes so:
-bn Divide o arquivo em partes com n bytes de tamanho. A unidade de n pode ser em k
(kilobytes ) ou M (Megabytes).
-ln Divide o arquivo em partes com n linhas de tamanho.
Sintaxe: split [opes] <arquivo> [prefixo]
Ex: O arquivo arqu2.txt ser dividido em arquivos de 3 linhas cada.
37
11:36
11:36
11:36
11:36
11:36
21:42
11:27
12:57
13:02
13:00
12:58
16:42
16:40
21:42
arqlinaa
arqlinab
arqlinac
arqlinad
arqlinae
arqu1.txt
arqu2.txt
cap2.tex
image.jpg
page.html
parIII.tex
parII.tex
parI.tex
texto.txt
PETTELE)))
Captulo 3. Comandos
$
cut : Extrai colunas ou campos de um arquivo.
Sintaxe: cut [opes] <arquivo>
As opes podem ser:
$ date
Qua Jan 11 14:04:49 BRST 2006
$ date|cut -d" " -f 4
14:06:31
$ date|cut -c 5
J
$
tr : Substitui caracteres
Pode ser usado para trocar as letras de maisculas para minsculas.
Sintaxe: tr [opes] <string1> <string2>
As opes principais so:
38
PETTELE)))
Captulo 3. Comandos
$ cat capital.txt
Rio
de
Janeiro
So
Paulo
Vitria
Belo
Horizonte
$ cat capital.txt|tr -s " "
Rio de Janeiro
So Paulo
Vitria
Belo Horizonte
$
paste : Exibe lado a lado contedo de arquivos.
Sintaxe: paste [opes] <arquivo1> <arquivo2>
As opes so:
$ cat estado.txt
Rio de Janeiro
So Paulo
Esprito Santo
Minas Gerais
$ cat capital.txt
Rio de Janeiro
So Paulo
Vitria
Belo Horizonte
Universidade Federal Fluminense
39
PETTELE)))
Captulo 3. Comandos
$ wc arqu2.txt
14
90
$ wc -l arqu2.txt
14 arqu2.txt
$ wc -w arqu2.txt
90 arqu2.txt
$ wc -c arqu2.txt
600 arqu2.txt
$
600 arqu2.txt
$ tail -n 5 arqu1.txt
Para entender o conceito,
voc deve pensar em
"liberdade de expresso",
no em "cerveja grtis".
$
As opes so semelhantes a do comando head, porm sero mostradas as ltimas m linhas ou
ltimos m bytes.
Universidade Federal Fluminense
40
PETTELE)))
Captulo 3. Comandos
H tambm comandos variantes do grep: o egrep e o fgrep. O primeiro tem como caracterstica
adicional a possibilidade do uso de metacaracteres. O segundo no apresenta essa funcionalidade.
A vantagem deste ltimo sobre o comando grep sua rapidez.
Exemplo: Sero localizadas as linhas que comeam com um caracter qualquer seguido das letras
S ou P do arquivo arq1.txt.
Observe que foram usados apstrofos ' para limitar a expresso procurada. Seu uso importante
para evitar erros de interpretao pelo shell, j que h caracteres com signicado especial.
O caracter '' foi usado para indicar o incio da linha, o ponto . para indicar um caracter qualquer
e a barra | foi usada para representar ou lgico. A expresso ^.(S|P), ento, signica incio de
linha com qualquer caracter seguido das letras S ou P. As expresses com uso desses caracteres
Universidade Federal Fluminense
41
PETTELE)))
Captulo 3. Comandos
especiais so chamadas de expresses regulares. A seo 3.3 tem mais sobre o uso de expresses
regulares.
As principais opes do grep so listadas abaixo:
$ head -c 23 arqu1.txt
"Software Livre" uma
$
more : Mostra arquivos texto tela a tela
Sintaxe: more [opo] <arquivo>
42
PETTELE)))
Captulo 3. Comandos
Pipes
Os Pipes so a forma pela qual podemos construir uma conexo de dados entre a sada de um comando
e a entrada de outro. A sada do comando anterior serve de entrada para o posterior.
Forma de um comando pipe: comando1 | comando2 | ...
Comandos conectados por pipe formam um pipeline.
Por exemplo: `ls -la|more`. Este comando faz a listagem longa de arquivos, que enviada ao
comando more. O comando more tem a funo de efetuar uma pausa a cada 25 linhas do arquivo.
Comando tee
Envia o resultado do programa para a sada padro do terminal e, ao mesmo tempo, para uma sada
escolhida, por exemplo, um arquivo. Este comando deve ser usado com o comando pipe.
Exemplo:
ls -la|tee listagem.txt
A sada do comando ser mostrada normalmente no terminal e, ao mesmo tempo, gravada no arquivo
listagem.txt.
43
PETTELE)))
Captulo 3. Comandos
Caracter Descrio
.
[ ]
[^]
?
*
+
{}
^
$
\b
\
|
()
.*
*?
+?
{}?
Exemplos
Coringa de um caracter
Coincide com qualquer um dos caracteres listados
Coincide com qualquer um dos caracteres, exceto os listados
O caracter anterior pode aparecer ou no
O caracter anterior pode aparecer em qualquer quantidade
O caracter anterior deve aparecer no mnimo uma vez
O caracter anterior deve aparecer na quantidade indicada
Coincide com o comeo da linha
Coincide com o m da linha
Limita uma palavra (letras, nmeros e sublinhado)
Torna os metacaracteres caracteres comuns.
Atua como operador "ou".
Faz com que vrios caracteres sejam vistos como um s.
Qualquer caracter, em qualquer quantidade.
Semelhante ao asterisco.
Semelhante ao sinal de mais.
Semelhante s chaves simples.
vi.a
[gpr]ato
[^mf]ato
meios?
go*gle
go+gle
go{1,5}gle
^rio
mente$
\b(meu)
srio\?
(co|fu)mo
(sai)?rei
eu.*voc
44
PETTELE)))
Captulo 4
Introduo ao script-shell para LINUX
4.1 Aspectos bsicos
4.1.1 Script e Script Shell
O shell um interpretador de comandos que possui uma linguagem utilizada por diversas pessoas para
facilitar a realizao de inmeras tarefas administrativas no Linux (como efetuar backup regularmente,
procurar textos, criar formataes), e at mesmo para criar programas um pouco mais elaborados. A
linguagem shell interpretada, no havendo necessidade de compilar para gerar um arquivo executvel.
Um script shell , ou simplesmente script , um arquivo contendo uma seqncia de um ou mais
comandos. Este arquivo diretamente executvel quando chamado pelo nome.
O Shell foi escrito em diferentes verses. Dos vrios programas Shell existentes, o Bourne Shell, o
Korn Shell e o C Shell se destacam por serem os mais utilizados e conhecidos.
O Bourne Shell conhecido como Shell padro, sendo o mais utilizado e estando na maioria dos
sistemas Unix like.
O Korn Shell uma verso melhorada do Bourne Shell.
O C Shell possui uma estrutura bastante parecida com a linguagem C e tambm uma verso
modicada do Bourne Shell.
Alm desses, h um shell padro do Linux, chamado Bourne-Again Shell. Este pode ser considerado
o mais completo, sendo compatvel com todos os shells citados anteriormente.
Mas qualquer programador pode fazer o seu Shell. Estes shells tornaram-se conhecidos pois j
vinham com o sistema, exceto o Korn, que tinha que ser adquirido separadamente. O Bourne Shell
vinha com o System V e o C Shell com o BSD.
Algumas caractersticas:
Shell
Bourn Shell
Bourn-Again Shell
Korn Shell
C shell
Prompt
$
$
$
%
Representao
sh
bash
ksh
csh
45
#!/bin/bash
Os caracteres especiais #! (chamados hash-bang ) informam ao kernel que o prximo argumento
o programa utilizado para executar este arquivo. No caso, /bin/bash o shell que utilizamos. O
kernel l o hash-bang no incio da linha, ento ele continua lendo os caracteres seguintes e inicia o bash.
Quando o shell l o hash-bang, ele o interpreta como uma linha de comentrio e a ignora, iniciando a
execuo do programa.
preciso mudar a permisso do arquivo para executvel para ele funcionar. Isso feito pelo
comando chmod. Para que o programa seja executvel de qualquer parte do sistema necessrio salvlo em algum diretrio que esteja no PATH (varivel do sistema que contm a lista de diretrios onde
o shell procura pelo comando digitado). Entretanto, permitido salv-lo em um diretrio qualquer
(como o diretrio home do usurio), porm na hora de execut-lo pelo prompt, necessrio que seja
indicado todo o caminho desde a raiz, ou, estando no mesmo diretrio do arquivo, digitar no prompt:
./nomearquivo.
OBS: Tambm possvel modicar o PATH para incluir um diretrio de sua escolha.
Por exemplo: vamos supr que o usurio criou uma pasta em seu diretrio para salvar seus scripts
com o nome de scripts. Para tornar esse diretrio como parte do PATH faa o seguinte:
Digite no prompt:
$ echo $PATH
Esse seu PATH atual. Em seguida digite:
$ PATH=$HOME/scripts:$PATH
e
$ echo $PATH
Esse seu novo PATH, com seu diretrio de exemplos includo. Agora seus scripts podem ser
executados de qualquer diretrio. Porm, dessa forma, a mudana da varivel PATH s vale enquanto
o shell corrente estiver aberto. Se for aberto outro shell, a mudana no ter efeito.
Existem arquivos que so inicializados assim que o shell aberto:
/etc/profile : Tem as conguraes bsicas do sistema e vale para todos os usurios. Somente
o root tem permisso para modicar esse arquivo.
PATH=$PATH:~/scripts
alias c='clear'
alias montar='mount /dev/fd0'
Universidade Federal Fluminense
46
PETTELE)))
#!/bin/bash
echo "Programa UM!"
Agora no prompt, mude as permisses do arquivo.
$ sh um.sh
Neste caso o arquivo estava no mesmo diretrio de trabalho. E se o arquivo estivesse em um
diretrio diferente? Lembre-se de mudar o PATH!
"command not found - Esse quer dizer que o shell no encontrou seu programa.
A razo para isso pode ser que o nome do comando foi digitado de forma diferente do nome do
arquivo. Certique-se de que o nome est igual. Outra razo possvel que o arquivo est em
um local diferente do PATH padro. Nesse caso, deve-se proceder conforme explicado na seo
anterior, que explica como salvar o arquivo.
"Permission denied - A permisso para execuo do arquivo foi negada. O usurio deve mudar
a permisso do arquivo para executvel.
Outro erro comum o de sintaxe. Nesse caso o shell encontra o script e indica a linha onde
ocorreu o erro no programa.
4.2.2
Quoting
47
PETTELE)))
4.3. Comentrios
$
>
>
>
>
4.3 Comentrios
Para deixar seu programa mais claro e fcil de entender, o usurio no s pode como deve acrescentar
comentrios em seu cdigo-fonte utilizando o caracter # no incio da linha. Esta linha no ser
executada pelo shell quando ele o encontrar. Isso bastante til para permitir a leitura posterior do
arquivo, correo de erros, mudanas no programa entre outras tarefas.
Por exemplo, no incio de um script poderia ser escrita a sua funo.
48
PETTELE)))
49
PETTELE)))
$ cat local.sh
#Programa recebe e mostra dados
echo Cidade: $1
echo Estado: $2
echo Pas: $3
$ ./local.sh Niteri "Rio de Janeiro" Brasil
Cidade: Niteri
Estado: Rio de Janeiro
Pas: Brasil
Como pode ser visto no exemplo, o programa chamado local recebe 3 argumentos. O primeiro,
Cidade, guardado na varivel $1, o segundo, Estado, em $2 e o terceiro, Pas, em $3. Porm, o shell
limita em 9 o nmero de argumentos. Para trabalhar com essa limitao, existe o comando shift n
que faz com que os primeiros n argumentos passados no faam parte na contagem de argumentos.
Universidade Federal Fluminense
50
PETTELE)))
Exemplo: Sero passados mais de 9 argumentos para o programa, mas atravs do uso do comando
shift ser possvel listar todos.
$ cat shift.sh
#Programa recebe e mostra dados usando shift
echo Argumento1: $1
echo Argumento2: $2
echo Argumento3: $3
echo Argumento4: $4
echo Argumento5: $5
echo Argumento6: $6
echo Argumento7: $7
echo Argumento8: $8
echo Argumento9: $9
shift 9
echo Argumento10: $1
echo Argumento11: $2
$ ./shift.sh a b c d e f g h i j l m n
Argumento1: a
Argumento2: b
Argumento3: c
Argumento4: d
Argumento5: e
Argumento6: f
Argumento7: g
Argumento8: h
Argumento9: i
Argumento10: j
Argumento11: l
$ * - Este parmetro informa uma string com todos os argumentos passados para o programa, onde
cada argumento aparece separado pelo IFS (veja a seo 5.8, que fala de variveis de sistema).
$ @ - Este parmetro semelhante ao anterior, porm os argumentos aparecem separados por espaos
em branco.
51
PETTELE)))
$ cat parametros.sh
# Mostra os dados relativos aos parametros passados
echo Foram passados $# argumentos.
echo Os argumentos foram: $@.
$ ./parametros.sh um dois trs quatro
Foram passados 4 argumentos.
Os argumentos foram: um dois trs quatro.
$ cat read.sh
# uso do comando read
echo Digite uma palavra:
read algo
echo Voc digitou: \"$algo\"
$ ./read.sh
Digite uma palavra:
Por que no uma frase?
Voc digitou: "Porque no uma frase?"
Este comando permite ainda a passagem de uma lista de variveis, desde que estas venham separadas entre espaos em branco.
Exemplo: Agora o programa read sofreu uma modicao para receber uma lista de variveis.
$ cat read.sh
# uso do comando read
echo Digite umas palavras:
read prim segun ter
echo Voc digitou:
Universidade Federal Fluminense
52
PETTELE)))
echo
echo
echo
\"$prim\"
\"$segun\"
\"$ter\"
$ ./read.sh
Digite umas palavras:
Mas agora eu quero digitar uma frase!
Voc digitou:
"Mas"
"agora"
"eu quero digitar uma frase!"
Se forem passadas mais variveis do que o comando read vai ler, a varivel excedente interpretada
como se zesse parte da ltima varivel. Como pode ser visto pelo exemplo anterior, onde foram
passadas mais variveis do que as 3 que o programa leria. Ento, a terceira varivel cou com uma
frase.
Algumas opes podem ser usadas com o comando read. So elas:
-p Nos exemplos acima foi preciso usar o comando echo toda vez antes do comando read.
Porm, isso no necessrio, basta usar esta opo. O prximo exemplo mostra como.
Exemplo:
$ cat read.sh
# uso do comando read
read -p "Digite umas palavras:" prim segun ter
echo Voc digitou:
echo
\"$prim\"
echo
\"$segun\"
echo
\"$ter\"
$ ./read.sh
Digite umas palavras:Dessa vez o echo no foi usado antes
Voc digitou:
"Dessa"
"vez"
"o echo no foi usado antes"
-s Esse parmetro serve para no ecoar o que foi digitado. Seu uso principal na leitura de
senhas.
-n Este parmetro permite limitar o nmero de caracteres que sero lidos pelo read. Sua
sintaxe : read -n N string. Ler apenas os N caracteres da string digitada.
Universidade Federal Fluminense
53
PETTELE)))
4.6. Funes
4.6 Funes
Funes so estruturas que renem comandos na forma de blocos lgicos, permitindo a separao do
programa em partes. Quando o nome de uma funo chamado dentro do script como um comando,
todos os comandos associados a esta funo so executados.
A sintaxe para o uso de funes da forma:
function nome () {
...
<comandos>
...
}
Onde nome o nome que ser dado funo criada. E comandos denem o corpo da funo.
A principal vantagem de usar funes a possibilidade de organizar o cdigo do programa em
mdulos.
O exemplo a seguir demonstra o uso de funes em script. Um menu de opes mostrado, sendo
que cada opo leva execuo de uma funo diferente.
#!/bin/bash
#
#
# Este script executa as funes bsicas de uma calculadora:
# Soma, Subtrao, Multiplicao e Diviso.
#
#
#
#
clear
menu()
{
echo
echo
echo
echo
echo
echo
echo
echo
echo
echo
echo
echo
"
Calculadora Bsica
"
"
Operao apenas com inteiros
"
"|-----------------------------------|"
"| Escolha uma das opes abaixo: |"
"|-----------------------------------|"
"| 1) Soma
|"
"| 2) Subtrao
|"
"| 3) Multiplicao
|"
"| 4) Diviso
|"
"| 5) Sair
|"
"|-----------------------------------|"
"|-----------------------------------|"
read opcao
case $opcao in
Universidade Federal Fluminense
54
PETTELE)))
4.6. Funes
1)
2)
3)
4)
5)
*)
soma ;;
subtra ;;
mult ;;
div ;;
exit ;;
"Opo Inexistente" ;
clear ;
menu ;;
esac
}
soma()
{
clear
echo "Informe o primeiro nmero"
read num1
echo "Informe o segundo nmero"
read num2
echo "Resposta = `expr $num1 "+" $num2`"
menu
}
subtra()
{
clear
echo "Informe o primeiro nmero"
read num1
echo "Informe o segundo nmero"
read num2
echo "Resposta = `expr $num1 "-" $num2`"
menu
}
mult()
{
clear
echo "Informe o primeiro nmero"
read num1
echo "Informe o segundo nmero"
read num2
echo "Resposta = `expr $num1 "*" $num2`"
menu
55
PETTELE)))
4.6. Funes
}
div()
{
clear
echo "Informe o primeiro nmero"
read num1
echo "Informe o segundo nmero"
read num2
echo "Resposta = `expr $num1 "/" $num2`"
menu
menu
Repare no script acima que a funo menu foi colocada no nal do programa. Experimente chamar
a funo menu no incio e veja o que acontece.
#!/bin/bash
#
#
# Este script executa as funes bsicas de uma calculadora:
# Soma, Subtrao, Multiplicao e Diviso.
#
# PARTE -> MENU
#
#
clear
menu(){
echo
echo
echo
echo
echo
"
Calculadora Bsica
"
"
Operao apenas com inteiros
"
"|-----------------------------------|"
"| Escolha uma das opes abaixo: |"
"|-----------------------------------|"
56
PETTELE)))
echo
echo
echo
echo
echo
echo
echo
4.6. Funes
"| 1) Soma
|"
"| 2) Subtrao
|"
"| 3) Multiplicao
|"
"| 4) Diviso
|"
"| 5) Sair
|"
"|-----------------------------------|"
"|-----------------------------------|"
read opcao
case $opcao in
1) . soma.sh ;;
2) . subtra ;;
3) . mult ;;
4) . div ;;
5) exit ;;
*) "Opo Inexistente" ;
clear ;
menu ;;
esac
}
menu
O script seguinte refere-se a operao de soma.
#!/bin/bash
#
#
# Este script executa as funes bsicas de uma calculadora:
# Soma, Subtrao, Multiplicao e Diviso.
#
# PARTE -> SOMA
soma()
{
clear
echo "Informe o primeiro nmero"
read num1
echo "Informe o segundo nmero"
read num2
echo "Resposta = `expr $num1 "+" $num2`"
menu
}
soma
57
PETTELE)))
4.7. Depurao
4.7 Depurao
Para vericar os problemas e possveis causas de erros que acontecem nos scripts, basta rodar o
programa da seguinte forma:
$ sh -x programa
A opo -x faz com que o programa seja executado passo-a-passo, facilitando a identicao de
erros.
58
PETTELE)))
Captulo 5
Manipulao de variveis
Varivel uma posio nomeada de memria, usada para guardar dados que podem ser manipulados
pelo programa.
Em shell no necessrio declarar a varivel como em outras linguagens de programao.
fi for function
time [[
]]
if
in
Alm disso, o Unix possui outros comandos, vistos nos captulos anteriores.
Em programao, geralmente trabalhamos com manipulao de variveis. Dessa forma, importante lembrar que o uso dessas palavras deve ser evitado, tanto no nome dado s variveis quanto no
nome dado ao script.
$ nomevar=valor
Uma varivel reconhecida pelo shell quando ela vem precedida pelo smbolo $. Quando este
smbolo encontrado, o shell substitui a varivel pelo seu contedo. nomevar o nome da varivel e
valor o contedo que ser atribudo varivel. importante assegurar que no haja espao antes
e depois do sinal "="para evitar possveis erros de interpretao. No exemplo acima, foi criada uma
varivel local. Para criar um varivel global, usado o comando export.
$ export nomevar
ou
$ export nomevar=valor
Exemplo: Ser atribudo um valor varivel chamada var, e em seguida este valor ser mostrado
pelo comando echo.
59
$ var=Pensamento
$ echo "O contedo o $var"
O contedo o Pensamento
Vale lembrar algumas regras para a nomenclatura de variveis que se aplicam s linguagens de
programao:
$ cat dir.sh
#!/bin/bash
echo "Veja que o diretrio vai mudar"
echo "Inicialmente o diretrio era: $PWD"
# neste ponto o diretorio mudou
cd /usr/bin
echo "Agora o diretrio atual $PWD"
echo "Mas terminado o programa parece que nada aconteceu.
O diretrio continua sendo o inicial."
$ sh dir.sh
Veja que o diretrio vai mudar
Inicialmente o diretrio era: /home/kurumin/scripts
Agora o diretrio atual /usr/bin
Mas terminado o programa parece que nada aconteceu.
O diretrio continua sendo o inicial.
$
Universidade Federal Fluminense
60
PETTELE)))
$ unset var
$ echo "O contedo o $var"
O contedo o
$ readonly nomevar
Todas as variveis readonly, uma vez declaradas, no podem ser "unsetadas"ou ter seus valores
modicados. O nico meio de apagar as variveis readonly declaradas pelo usurio saindo do shell
(logout).
$(comando)
ou
`comando`
61
PETTELE)))
$ dir=`pwd`
$ echo "O diretrio atual tem o seguinte caminho: $dir"
O diretrio atual tem o seguinte caminho: /home/kurumin/scripts
$ camada[0]=Fsica
$ camada[1]=Enlace
$ camada[2]=Redes
$ echo "As 3 camadas mais baixas da internet so: ${camada[*]}"
As 3 camadas mais baixas da internet so: Fsica Enlace Redes
Outra forma de se atribuir valores em array :
nomevar=(valor1, valor2, ..., valorn).
62
PETTELE)))
$ num=(1 2 3 4 5)
$ echo "${num[*]}"
1 2 3 4 5
$ echo "${num[@]}"
1 2 3 4 5
$ OLDIFS=$IFS
$ IFS='-'
$ echo "${num[*]}"
1-2-3-4-5
$ echo "${num[@]}"
1 2 3 4 5
$ echo $IFS
$ echo "$IFS"
$ IFS=$OLDIFS
$ echo "$IFS"
Vamos entender o que foi feito: foi criado um vetor para ilustrar o IFS quando forem usados
os caracteres e * para listar o array. O IFS inicial um espao em branco, ento tanto pelo
uso do como pelo uso do *, os elementos foram listados separados por um espao em branco.
Em seguida uma varivel chamada OLDIFS recebeu o contedo de IFS e IFS recebeu um hfen
(-). A separao na listagem dos elementos saiu diferente, ou seja, o novo separador foi usado
quando foi usado o asterisco. Finalmente, o IFS recebeu seu valor inicial, espao em branco.
Essa mudana permanece somente na seo em que foi modicada e at que ela seja fechada.
PATH Armazena uma lista de diretrios onde o shell procurar pelo comando digitado.
PWD Contm o diretrio corrente.
PS1 Esta denominada Primary Prompting String. Ou seja, ela a string que est no prompt que
vemos no shell. Geralmente a string utilizada : \u@\h:\w $. O signicado desses caracteres e
de outros principais est explicado abaixo:
\s O nome do shell.
\u Nome do usurio que est usando o shell.
\h O hostname
\w Contm o nome do diretrio corrente desde a raiz.
\d Mostra a data no formato: dia_da_semana ms dia.
\nnn Mostra o caracter correspondente em nmeros na base octal.
\t Mostra a hora atual no formato de 24 horas, HH:MM:SS.
\T Mostra a hora atual no formato de 12 horas, HH:MM:SS.
Universidade Federal Fluminense
63
PETTELE)))
PS2 Esta denominada Secondary Prompting String. Ela armazena a string do prompt secundrio.
O padro usado o caracter >. Mas pode ser mudado para os caracteres mostrados acima.
64
PETTELE)))
Captulo 6
Testes e Comparaes em Script-Shell
6.1 Cdigo de retorno
Antes de falar sobre testes e comparaes importante que o usurio entenda como as decises so
tomadas dentro de um programa.
Todo comando do UNIX retorna um cdigo e este chamado cdigo de retorno. Quando o comando
executado sem erros, o cdigo retornado vale 0. Porm, se houver alguma falha, retornado um
nmero diferente de 0.
O caracter especial ? funciona como uma varivel que guarda o cdigo de retorno do comando
anterior. O exemplo abaixo mostra o resultado da operao de alguns comandos.
Exemplo: Quando acontece algum erro na execuo do comando, o cdigo de retorno diferente
de zero.
$ echo "$PS1"
\u@\h:\w\$
$ echo $?
0
$ rm documento.txt
rm: cannot lstat `documento.txt': No such file or directory
$ echo $?
1
$
$
$
1
$
$
0
var=Z
test $var = w
echo $?
[ $var = Z ]
echo $?
65
-a - e (and ).
-o - ou (or).
! - negao (not).
A combinao desses 3 operadores pode gerar outras funes lgicas.
Vrias condies tambm podem ser agrupadas com o uso de condio".
Ex:
$ cat boole.sh
#!/bin/bash
read -p "Informe um nmero e uma letra: " num letra
if [ \( "$num" -gt 0 -a "$num" -lt 10 \) -o \( $letra = v \) ]
then
echo "Acertou a faixa do numero ou a letra."
else
echo "Errou as duas informaes."
fi
$ sh boole.sh
Informe um nmero e uma letra: 15 v
Acertou o faixa do numero ou a letra.
$
66
PETTELE)))
num=10
[ $num -eq 9 ]; echo $?
[ $num -le 9 ]; echo $?
[ $num -ge 9 ]; echo $?
Outra maneira de realizar o teste colocando var/nmero entre aspas. Dessa forma evitamos a
ocorrncia de erros.
== Igual
> Maior que
>= Maior ou igual
< Menor que
<= Menor ou igual
!= No-igual
A sintaxe :
let expresso
Exemplo:
67
PETTELE)))
((expresso))
let var++
let var--
Exemplo:
$ num=102
$ let num++
$ echo $num
103
$ num=$[$num + 1]
$ echo $num
104
$ num=$((num+1))
$ echo $num
105
$ let num=num+1
$ echo $num
106
$ let num+=4
$ echo $num
110
#!/bin/bash
echo "Digite a senha: "
read -s senha
Universidade Federal Fluminense
68
PETTELE)))
Binrios
= - Retorna verdadeiro se as duas strings forem iguais.
$ str=palavra
$ [ "$str" = "cadeia" ]
$ echo $?
1
Unrios
-z - Retorna verdadeiro se o comprimento da string igual 0.
-n - Retorna verdadeiro se o comprimento da string diferente de 0.
$ [ -n $str ]
$ echo $?
0
A sintaxe para a comparao de string segue o mesmo modelo para a comparao numrica:
69
PETTELE)))
-d O arquivo um diretrio.
-e O arquivo existe.
-f um arquivo normal.
-s O tamanho do arquivo maior que zero.
-r O arquivo tem permisso de leitura.
-w O arquivo tem permisso de escrita.
-x O arquivo tem permisso de execuo.
A sintaxe usada deve ser:
[ opo arquivo ]
Ex:
$ ls -l arqu1.txt data
-rwxrwxrwx
1 pet linux
-rw-r--r-1 pet linux
drwxr-xr-x
3 pet linux
$ [ -d scripts ]
$ echo $?
0
$ [ -d arqu1.txt ]
$ echo $?
1
$ [ -e arqu1.txt ]
$ echo $?
0
$ [ -f arqu1.txt ]
$ echo $?
0
$ [ -r data ]
$ echo $?
0
$ [ -x data ]
$ echo $?
1
161
95
1312
2005-04-09 21:42
2005-04-07 22:00
2005-01-07 22:57
70
arqu1.txt
data
scripts
PETTELE)))
Captulo 7
Controle de uxo
Para as linguagens de programao, uma das mais importantes estruturas o controle de uxo. Com
o shell no diferente. Com ele, a execuo do programa pode ser alterada de forma que diferentes
comandos podem ser executados ou ter sua ordem alterada de acordo com as decises tomadas. So
realizados saltos, desvios ou repeties. Nas prximas sees explicaremos cada tipo de estrutura.
if[expresso]; then
fi
comando
Ex: Este programa bem simples mostra o uso do if. H um arquivo chamado livro.txt cujo
contedo segue abaixo:
#LIVRO
#EXEMPLARES
###########################
eletromagnetismo 5
redes
4
clculo
8
fsica
6
eletrnica
7
O programa abaixo mostra o nmero de exemplares de um determinado assunto. Mas, primeiro,
vericado se o livro est na lista.
#!/bin/bash
echo -n
read Livro
if grep $Livro livro.txt>>/dev/null
then echo "O livro $Livro possui `grep $Livro livro.txt|cut -f2` exemplares."
else echo "Este livro no est na lista"
fi
Obs: O diretrio /dev/null um lugar para onde redirecionamos a sada de um comando quando
no desejvel que ela aparea no prompt.
if [expresso]; then
comando
elif [expresso]; then
comando
elif [expresso]; then
...
comando
else
comando
fi
72
PETTELE)))
Deciso com && e || Esses caracteres permitem a tomada de decises de uma forma mais reduzida.
A sintaxe usada :
7.3.1
While
Nesta estrutura feito o teste da condio, em seguida ocorre a execuo dos comandos. A repetio
ocorre enquanto a condio for verdadeira.
while <condio> do
<comandos>
done
Universidade Federal Fluminense
73
PETTELE)))
7.3.2
Until
Neste caso, a repetio ocorre enquanto a condio for falsa. Ou seja, primeiramente a condio
testada, se o cdigo de retorno for diferente de zero os comandos so executados. Caso contrrio, a
execuo do programa continua aps o loop.
until <condio> do
<comandos>
done
condio pode ser um teste, uma avaliao ou um comando.
Ex: Este exemplo semelhante ao exemplo anterior do comando while. O que mudou foi a
condio de teste.
#!/bin/bash
echo "Tabela de Multiplicao do 7: "
i=7;
n=10;
until [ $n -eq 0 ]
do
echo $i x $n = $(($i * $n))
let n-done
7.3.3
For
74
PETTELE)))
#!/bin/bash
for i in `seq 1 5`
do
mkdir diretorio$i
done
O comando seq NumInicial NumFinal faz uma contagem seqencial do nmero inicial dado at
o nmero nal.
Para estes 3 tipos de construo de loops, existem dois comandos que permitem alterar a rotina
de sua execuo . So eles:
break [n] - Este comando aborta a execuo do loop e salta para a prxima instruo aps o
loop.
continue [n] - Este comando faz com que o uxo de execuo do programa volte para o incio
do loop antes de complet-lo.
Ex: O Exemplo abaixo ilustra o uso de break e do continue
#!/bin/bash
echo "Tente acertar o nmero "
echo "Dica: Ele est entre 10 e 50. "
i=1
while true
do
echo "Digite o Nmero: "
read num
if [ $num != 30 ]
then
echo "Voc errou. Tente outra vez"
let i++
continue
Universidade Federal Fluminense
75
PETTELE)))
fi
if [ $num == 30 -a $i == 1 ]
then
echo Voc acertou de primeira. Parabns!
break
fi
if [ $num == 30 ]
then
echo Voc acertou aps $i tentativas.
break
fi
done
76
PETTELE)))
Apndice A
O Projeto GNU e o Linux
As informaes completas que esto neste captulo podem ser encontradas na pgina ocial do Projeto
GNU, veja ref. [11].
O Projeto GNU foi idealizado em 1983 como uma forma de trazer de volta o esprito cooperativo
que prevalecia na comunidade de informtica nos seus primrdios para tornar a cooperao possvel
uma vez mais, removendo os obstculos impostos pelos donos do software proprietrio.
Em 1971, quando Richard Stallman iniciou a sua carreira no MIT, ele trabalhava em um grupo que
usava software livre exclusivamente. Mesmo as empresas de informtica distribuam software livre.
Programadores eram livres para cooperar entre si, e freqentemente faziam isso.
Nos anos 80, quase todo o software era proprietrio, o que signicava que ele tinha donos que
proibiam e impediam a cooperao entre os usurios. Isso tornou o Projeto GNU necessrio.
Todo usurio de computadores necessita de um sistema operacional; se no existe um sistema
operacional livre, voc no pode nem mesmo iniciar o uso de um computador sem recorrer ao software
proprietrio. Portanto, o primeiro item na agenda do software livre um sistema operacional livre.
Nos anos 90, este objetivo foi atingido quando um kernel livre foi desenvolvido por Linus Torvalds:
este kernel era o Linux. A combinao do Linux com o quase completo sistema GNU resultou em um
sistema operacional completo: um sistema GNU baseado no Linux (GNU/Linux), incluindo Slackware,
Debian, Red Hat, entre outros. Leia o artigo: why-gnu-linux no site do projeto GNU.
Um sistema UNIX-like composto por muitos programas diferentes. Alguns componentes j
esto disponveis como software livre, por exemplo, X Window, TeX, GNU Emacs, GNU C, Bash,
Ghostscript. Atualmente, se tem feito um esforo para fornecer software para usurios que no so
especialistas em computadores. Portanto, estamos trabalhando em um desktop baseado em cones,
utilizando arrastar-e-soltar para ajudar os iniciantes a utilizar o sistema GNU.
O projeto GNU no somente desenvolvimento e distribuio de softwares livres. O corao do
projeto GNU uma idia: que o software deve ser livre.
77
2. A liberdade de estudar como o programa funciona e adapt-lo para as suas necessidades. Acesso
ao cdigo-fonte um pr-requisito para esta liberdade.
3. A liberdade de redistribuir cpias de modo que voc possa ajudar ao seu prximo.
4. A liberdade de aperfeioar o programa e liberar os seus aperfeioamentos, de modo que toda a
comunidade se benecie. Acesso ao cdigo-fonte um pr-requisito para esta liberdade.
importante ressaltar que Software Livre est ligada liberdade de expresso, e no de preo.
78
PETTELE)))
Apndice B
Editor de textos vi
O programa VI o mais famoso editor de texto ASCII do UNIX. Foi desenvolvido em Berkeley
University California por Willian Joy, a partir do editor UNIX Ed.
O VI trabalha em trs modos:
n repete o ltimo / ou ?
80
PETTELE)))
Referncias Bibliogrcas
[1] Neves, Julio Cezar, Programao Shell Linux, Editora Brasport, Rio de Janeiro, 2000.
[2] Araujo, Jiro, Comandos do Linux - Uso eciente e avanado, Editora Cincia Moderna Ltda.,
Rio de janeiro, 2001
[3] Tanenbaum, Andrew S., Sistemas Operacionais, Traduo D. A. Polli, USP, 2000.
[4] Raimundo, Rodivaldo Marcelo, Curso Bsico de programao em POSIX-Shell Script, Editora
Book Express, Rio de janeiro, 2000.
[5] Tanenbaum, Andrew S., Organizao Estruturada de Computadores , Terceira edio, Editora
Prentice/Hall do Brasil , Rio de Janeiro, 1992.
Sites
[6] Guia focalinux , www.focalinux.org, Este site contm guias sobre GNU/Linux de todos os
nveis.
[7] Bash FAQ, ftp://ftp.cwru.edu/pub/bash/FAQ, Perguntas e dvidas mais freqentes relacionadas
ao Bash.
[8] Expresses Regulares , http://guia-er.sourceforge.net, Guia sobre expresses regulares.
[9] Lista de discusso , http://br.groups.yahoo.com/group/shell-script, Lista de discusso do yahoogrupos.
[10] Shell Script - Por que programar tem que ser divertido, www.aurelio.net, Aurlio Marinho
Jargas, pgina pessoal. Contm uma vasta lista para referncias sobre script-shell.
[11] Projeto GNU, www.gnu.org, Pgina ocial do projeto GNU
[12] www.br-linux.org
[13] www.vivaolinux.com.br
[14] www.scriptbrasil.com.br
81