Вы находитесь на странице: 1из 109

Bem vindos!!!

Introduo aos Computadores CC103/CC113


Profs: Vtor Costa (vsc@dcc.fc.up.pt) Rita Ribeiro (rpribeiro@dcc.fc.up.pt) Ins Dutra (ines@dcc.fc.up.pt)
DCC/FCUP

Vtor: Tericas e Terico-prticas Rita: P1, P4, P5 e P6 Ins: P2 e P7

Horrios
Introduo aos Computadores 2012-2013 2

Pgina da disciplina
Prticas: http://www.dcc.fc.up.pt/~rpribeiro/ic1213/ Tericas: http://www.dcc.fc.up.pt/~vsc/IC/

Introduo aos Computadores 2012-2013

Bibliografia
Computer Science an Overview (11th Edition) J Glenn Brookshear, Pearson, 2011. Material complementar estar disponvel na pgina das tericas

Introduo aos Computadores 2012-2013

Avaliao
Mini testes ao longo do semestre Exame final Parte prtica dos testes e exame incidir sobre pequenos trabalhos prticos realizados durante o semestre possvel fazer a disciplina apenas com os testes (regras na ficha curricular da disciplina no sigarra)
Introduo aos Computadores 2012-2013 5

Avaliao
Ateno: Os trabalhos prticos no so obrigatrios, mas contam para a frequncia e para o bom desempenho na parte prtica dos testes e exame! Mais detalhes: pgina da disciplina no sigarra

Introduo aos Computadores 2012-2013

Meios de comunicao e avisos


Email do sigarra enviado atravs da pgina da disciplina no prprio sigarra (estejam atentos!) Mailing list: ic1213@alunos.dcc.fc.up.pt
Para se inscrever e para + info:
http://lists.alunos.dcc.fc.up.pt/mailman/listinfo/ic1213

Durante as aulas (fortemente recomendado!) Gabinetes dos profs: DCC 1.45, 1.74, 1.31
Introduo aos Computadores 2012-2013 7

Laboratrios
Localizados no prdio do departamento de cincia de computadores (DCC), piso 1 lab1 e lab2 (todos no mesmo corredor) Ateno: todos os alunos precisam ter uma conta de acesso s mquinas dos labs do DCC, que diferente da conta do sigarra/FCUP.

Introduo aos Computadores 2012-2013

Laboratrios
Ambiente: computadores com Unix Fedora Core Software utilizado para submisso de trabalhos prticos: mooshak

Introduo aos Computadores 2012-2013

Programa (1)
Noes bsicas de arquitetura de computadores. Representao digital de informao e seu processamento. Estrutura de computadores, componentes principais. Modelos abstratos de mquinas. Mquinas programveis: linguagens mquina, assembladores, assembladores mnimos.
Introduo aos Computadores 2012-2013

10

Programa (2)
Linguagens de programao: evoluo, classificao. Paradigmas de programao. Sintaxe e semntica de linguagens. Compiladores e interpretadores. Carregadores e ligadores. Ferramentas de ajuda programao.
Introduo aos Computadores 2012-2013

11

Programa (3)
Sistemas de operao (referncia principal: UNIX/Linux). Sistema de Ficheiros. Organizao e administrao de memria central. Linguagens de comandos. Utilitrios. Controle de perifricos. Redes de computadores: protocolos.
Introduo aos Computadores 2012-2013 12

O computador
UCP: Unidade Central de Processamento (CPU) UAL: Unidade Aritmtica e Lgica (ALU) MEMRIA PRINCIPAL UCP UAL DMA deixa a UCP disponvel para outro processamento em paralelo Troca de informaes (dados ou instrues) Sinais de controle (fluxo unidirecional) disco, impressora, teclado, rato, cmera, CD, Ipod, telemvel etc DISPOSITIVOS DE ENTRADA E SADA

Introduo aos Computadores 2012-2013

13

Prembulo
Comeamos pela explicao da interface bsica que nos permite manipular os recursos de um computador:
o sistema de operao

Foco neste curso: Unix (linux) Vrios dos conceitos aprendidos em Unix tambm so vlidos para o sistema Windows, porm em Windows os detalhes esto muito mais escondidos
Introduo aos Computadores 2012-2013 14

Unix bsico e avanado


Agenda
Desenho e implementao de Unix Comandos bsicos Unix Comandos mais avanados Programao Unix (shell scripts)
(material baseado nos slides de David Slater Cornell University)

Introduo aos Computadores 2012-2013

15

Outras opes
Se sua mquina tiver o sistema de operao windows:
cygwin: um ambiente Linux para Windows (http://www.cygwin.com/) wubi: instalador de Ubuntu Linux para windows. Faz dual boot de windows e ubuntu sem reparticionamento (http://wubi-installer.org/) Qualquer CD de linux (http://www.livecdlist.com) VMWare: mquina virtual Linux, corre linux em windows

Introduo aos Computadores 2012-2013

16

Desenho e Implementao de Unix (Linux)

compilers

Introduo aos Computadores 2012-2013

17

Shell Unix
Um shell um programa que permite a interao entre o utilizador e o sistema UNIX:
L e analisa (parse) comandos do utilizador Avalia caracteres especiais Inicia pipes, redirees e processamento em background Encontra e inicia programas para execuo

Introduo aos Computadores 2012-2013

18

Histria dos Shell Unix


H duas famlias de shell unix: Bourne shell (AT&T) sh ksh C shell (Berkeley) csh tcsh bash

Nosso foco no bash: sintaxe mais simples e o shell default em muitos sistemas
Introduo aos Computadores 2012-2013 19

Sistema de ficheiros
Ficheiros so organizados em diretrios, que, por sua vez so organizados numa estrutura hierrquica
root

Introduo aos Computadores 2012-2013

20

Permisses
Ficheiros podem ter permisses para leitura, escrita ou execuo

Introduo aos Computadores 2012-2013

21

Exemplo

Introduo aos Computadores 2012-2013

22

Ficheiros
Podem ter tipos diferentes, normalmente identificados pela extenso Tipos esto relacionados com o formato dos ficheiros Por exemplo, ficheiros com extenso doc ou docx esto em formato editvel pelo Microsoft Office, LibreOffice ou OpenOffice Ficheiros com extenso txt esto em formato texto ASCII
Introduo aos Computadores 2012-2013 23

American Standard Code for Information Interchange (ascii)

Introduo aos Computadores 2012-2013

24

Extenses tpicas de ficheiros

Introduo aos Computadores 2012-2013

25

Commandos bsicos Unix


Introduo aos Computadores 2012-2013 26

Comandos Bsicos
cd dir troca para o diretrio com nome dir cd .. troca para um diretrio acima do diretrio corrente cd ~ troca para o diretrio home
Introduo aos Computadores 2012-2013 27

Comandos Bsicos
cp -i file1 file2 copia file1 para file2 mv -i file1 path move file1 to path rm -i file1 remove file1 O que e por que utilizar a opo -i?

Introduo aos Computadores 2012-2013

28

Comandos Bsicos
cp -i file1 file2 copia file1 para file2 mv -i file1 path move file1 to path rm -i file1 remove file1 O que e por que utilizar a opo -i? Para garantir que ficheiros no so removidos ou alterados por engano!
Introduo aos Computadores 2012-2013 29

cat file1 - mostra o contedo de file1 mkdir dir - cria um diretrio com nome dir ls dir - mostra o contedo do diretrio dir

Introduo aos Computadores 2012-2013

30

Formato geral de um comando bash

cmd arg1 arg2 ... argn Alguns comandos esperam uma entrada que pode vir do teclado (canal de entrada padro ou stdin standard input) ou de um ficheiro em disco Outros comandos servem para mostrar resultados. Estes normalmente vo para o ecr (canal de sada padro ou stdout standard output) Vrios comandos esperam por uma entrada e escrevem na sada
Introduo aos Computadores 2012-2013

31

Redireo da entrada e da sada padro


cmd > file redireciona a sada padro (ecr) para um ficheiro (escreve num ficheiro) cmd >> file redireciona a sada padro para um ficheiro (concatena) cmd < file executa cmd lendo a entrada de um ficheiro
Introduo aos Computadores 2012-2013 32

Comandos bash: exemplos


Nos exemplos, o smbolo inicial $ apenas um prompt $ echo Bem vindos IC! > input - Cria o ficheiro chamado input com contedo Bem vindos IC! $ tr '[:lower:]' '[:upper:]' < input >> output - Converte todas as letras minsculas do texto contido no ficheiro input para maisculas e concatena o resultado no ficheiro output
Introduo aos Computadores 2012-2013

33

Comandos bash: exemplo


Contedo do ficheiro output: (assumindo que ele ainda no existia ou estava vazio) BEM VINDOS IC! Notem que o a acentuado no foi convertido. Por que?
Introduo aos Computadores 2012-2013 34

Piping (smbolo |)
cmd1 | cmd2 executa cmd1 e envia sua sada diretamente ao comando cmd2 Composio de pipes: cmd1 < file1 | cmd2 | cmd3 | cmd4 > file2 Exemplo: $ echo H cinco palavras nesta frase" | wc w

Introduo aos Computadores 2012-2013

35

Cdigos de terminao de execuo


Quando um comando termina, sempre envia um cdigo de sada (entre 0 e 255) Este cdigo armazenado na varivel $? O cdigo 0 significa que o comando terminou de forma bem sucedida A pgina de manual de cada comando (man command) diz os cdigos que podem ser retornados
Introduo aos Computadores 2012-2013 36

Cdigos de terminao (Exit codes)


Exemplo: o comando grep retorna cdigo 0 se encontrar pelo menos um match: $ ls -l / | grep bin
drwxr-xr-x 1 ines root 65536 2010-07-05 20:45 bin

$ echo $? 0

Introduo aos Computadores 2012-2013

37

Expresses regulares
Permitem rapidamente encontrar padres em textos

Introduo aos Computadores 2012-2013

38

O comando egrep
Caracter ^ $ . Significado Incio da linha Fim da linha Qualquer caracter Ex ^g e$ .. Match gate gate Qualquer string com pelo menos 2 caracteres gate, gae Not match the gate gates a

Caracter precedente opcional

gat?e

garage

Introduo aos Computadores 2012-2013

39

egrep
Caracter () [] Significado Grupo de caracteres Grupo de caracteres opcionais Intervalo de caracteres Uma ou mais ocorrncias do caracter precedente
Introduo aos Computadores 2012-2013 40

Ex g(at)e g[at]e

Match gate gte, gae

Not match gae, ge gate, ge

g[a-c]te gate[1-3]+

gate, gbte, gcte gate1, gate11, gate131

gdte, gaate gate, gate4

egrep
Caracter * Significado Zero ou mais ocorrncias do caracter precedente Nmero de repeties do caracter precedente Prximo caracter no interpretado pelo comando Alternativa Ex gate[1-3]* Match gate, gate31 Not match gate4

{,}

a{2,5}

aa,aaaaa

a,xx3

20\*3

20*3

2053

(|)

(gate|gateaux)

gate, gateaux

grid

Introduo aos Computadores 2012-2013

41

egrep
^[A-Z].* matches possveis: The gate is open T Testando zip codes: ^[0-9]{5}(\-[0-9]{3})?$ 21920-030 or 21920
Introduo aos Computadores 2012-2013 42

egrep
Qualquer string contendo o caracter @ que termine com .com ^.+@.+\.com$ Ex: xpto@company.com

Introduo aos Computadores 2012-2013

43

O que um script shell?


Um (bash) script shell um ficheiro que contm texto que segue as seguintes propriedades:
A primeira linha #!/bin/bash (indica o shell a ser utilizado) Ficheiro tem permisso de execuo

Benefcios:
Reutilizao e partilha de cdigo Geralmente, cdigo menor e mais limpo que C, Java etc
Introduo aos Computadores 2012-2013 44

Meu primeiro script shell

Vamos olhar um script muito simples HelloWorld.sh: #! /bin/bash echo Ol, meu nome $USER, gostaria de dizer Ol ao mundo usando $SHELL em $HOSTNAME, uma $MACHTYPE mquina. "
Quando terminar de editar este ficheiro, mude as permisses para que este fique executvel:

chmod +x Helloworld.sh
Introduo aos Computadores 2012-2013 45

Expanso de nomes de ficheiros


Numa shell, se digitarmos: $ echo This is a test O resultado : This is a test Porm, se digitarmos: $ echo * O resultado : docview1033 pulse-IstLO6LDgRgx Por que?
Introduo aos Computadores 2012-2013 46

Expanso de nomes de ficheiros


O shell substitui o caracter * por todos os ficheiros no diretrio corrente. Este um exemplo de expanso do caminho (path), um tipo de expanso usada na shell. Note bem que alguns smbolos de expanso de nomes de ficheiros coincidem com aqueles usados nas expresses regulares, mas tm significado diferente!!!
Introduo aos Computadores 2012-2013 47

Interpretando caracteres especiais


Caracteres especiais: $*<>&?fg[] O shell interpreta estes caracteres de forma especial, a menos que coloquemos uma barra antes do caracter (escape character) (\$) ou entre aspas "$".

Introduo aos Computadores 2012-2013

48

Interpretando caracteres especiais


Quando invocamos um comando, o shell primeiro traduz os caracteres da linha de comando para o comando UNIX correspondente O poder de um script shell vem da capacidade do shell interpretar e expandir comandos
Introduo aos Computadores 2012-2013 49

Interpretando caracteres especiais


O shell interpreta o $ de forma especial Se var for uma varivel, $var o valor armazenado naquela varivel Se cmd for um comando, $(cmd) i interpretado e devolve o resultado da execuo de cmd $ echo $USER ines $ echo $(pwd) /home/ines
Introduo aos Computadores 2012-2013 50

Interpretando caracteres especiais


*^?fg[] so caracteres "wildcard" que a shell usa para fazer matching com:
Qualquer string (*) Um nico caracter (?) Um grupo de caracteres Um conjunto restrito de caracteres
Introduo aos Computadores 2012-2013 51

Interpretando caracteres especiais


* faz matching com qualquer string, incluindo a string vazia (isto , 0 ou mais caracteres). Exemplos:

Introduo aos Computadores 2012-2013

52

Interpretando caracteres especiais


? Faz matching com um nico caracter

Introduo aos Computadores 2012-2013

53

Interpretando caracteres especiais


[...] faz matching com qualquer caracter que esteja especificado entre os parnteses retos Podemos utilizar um hfen (como nas expresses regulares) para especificar um intervalo de caracteres possvel colocar vrgulas entre caracteres/intervalos
Introduo aos Computadores 2012-2013 54

Utilizao das aspas etc


Para que a shell no interprete caracteres especiais, podemos utilizar aspas etc:
Single Quotes: nenhum caracter especial entre as single quotes () interpretado Double Quotes (aspas ): variveis e comandos so interpretados e substitudos pelos respectivos valores/resultados Back Quotes (acento grave `): Executa comandos que estejam entre as back quotes
Introduo aos Computadores 2012-2013 55

Utilizando aspas etc


$ echo "$USER owes me $ 1.00" ines owes me $ 1.00 $ echo '$USER owes me $ 1.00' $USER owes me $ 1.00 $ echo "I am $USER and today is `date`" I am ines and today is Mon Jul 5 23:22:20 GMTDT 2010
Introduo aos Computadores 2012-2013 56

Utilitrios Unix
Utilitrios essenciais para processamento de textos e dados: gawk cat head less tail tr wc sort uniq grep sed Note: sed and gawk provide a whole language!
Introduo aos Computadores 2012-2013 57

grep
grep -i ignora capitalizao grep -A 20 -B 10 mostra as 10 linhas antes e as 20 linhas aps cada match grep -v inverte o match grep -o mostra somente a substring que faz match com a expresso regular grep -n mostra o nmero da linha onde o padro que faz match com a expresso regular foi encontrado
Introduo aos Computadores 2012-2013 58

grep
Exemplo: $ grep '[Mm]onster' Frankenstein.txt | wc -l 33

Introduo aos Computadores 2012-2013

59

cat, head, tail and less

Mostrar o contedo de ficheiros


cat file mostra o contedo de file cat file1 file2 mostra o contedo de file1 e de file2 no canal de sada padro (ecr) head -n 20 file mostra as 20 primeiras linhas do ficheiro file (default 10) tail -n 20 file - mostra as 20 ltimas linhas do ficheiro file (default 10) tail -f file keeps outputting appended data less file mostra o contedo do ficheiro de forma paginada e interage com o utilizador (o comando more tambm Introduo aos Computadores 2012-2013 pagina a sada) 60

Translate (tr)
Converte um conjunto de caracteres em outro tr aeiou AEIOU < file mostra o contedo de file com todas as vogais em maisculas tr -d '!@#$%^&*' <file remove do contedo de file os caracteres especificados entre plicas tr [A-Z] [a-z] < file converte maisculas para minsculas em file
Introduo aos Computadores 2012-2013 61

Translate (tr)
Exemplo: $ echo "$USER" o meu nome, mas mais interessante sem as vogais" | tr -d aeiouAEIOU ns m nm, ms ms ntrstng sm s vg

Introduo aos Computadores 2012-2013

62

Sort
Ordena alfabeticamente linhas de textos sort -r u file ordena em ordem reversa e remove linhas duplicadas sort -n -k 2 -t : file faz ordenao numrica pela segunda coluna usando o : como separador
$ echo -e "62\n5\n1\n11\n8" | sort -n 1 5 8 11 Introduo aos Computadores 2012-2013 62

63

Sort
Sem a opo n (compare com o slide anterior) $ echo -e "62\n5\n1\n11\n8" | sort 1 11 5 62 8

Introduo aos Computadores 2012-2013

64

Contagens
wc Mostra o nmero de linhas, palavras e bytes (carcacteres) de um ficheiro wc -l <file mostra o nmero de linhas em file wc -w <file pmostra o nmero de palavras em file $ echo Quantas palavras nesta frase? | wc -w 4 Quantas palavras existem no livro Frankestein? $ wc -w <Frankenstein.txt 77889
Introduo aos Computadores 2012-2013 65

Aliasing
Quanto mais usamos a shell, mais longos os comandos vo ficando porque mais opes usamos. Por exemplo, ls -l para ver as permisses de ficheiros, ou rm -i para garantir que um ficheiro no removido acidentalmente. Seria bom se pudssemos criar shortcutsPara isto, usamos o comando alias Alias: alias name=command O comando alias permite renomear e digitar um comando simples em vez de digitar um comand muito ongo Um alias pode ser definido na linha de comando Para que um alias fique permanente, necessrio adiicon-lo ao ficheiro .bashrc ou .bashrc_profile.
Introduo aos Computadores 2012-2013 66

Aliasing: exemplos
alias ls='ls --color=auto' alias dc=cd alias rm='rm -i' alias ll='ls -l' alias install='sudo apt-get install

Introduo aos Computadores 2012-2013

67

Aliasing
Plicas so necessrias se a string contm mais que uma palavra Para ver os aliases ativos digite: alias Nota: em ficheiros script, por exemplo, .bashrc, o smbolo # o caracter de comentrio. Qualquer linha que inicie com um # um comentrio, com exceo da linha que inicia com #!,
Introduo aos Computadores 2012-2013 68

Redireo de mensagens de erro


Podemos redirecionar mensagens de erro
cmd 2> command.error cmd 2>> comand.error

Podemos redirecionar simultaneamente as sadas de erro e sada padro para o mesmo ficheiro
cmd &> output

Introduo aos Computadores 2012-2013

69

Redireo
Podemos utilizar um dispositivo especial do sistema, /dev/null, para suprimir a sada. Basta redirecionar a sada para /dev/null Por que o seguinte comando no executa corretamente? cmd < file > file

Introduo aos Computadores 2012-2013

70

Redireo
Porque antes do comando ser executado, file aberto para leitura e escrita. Quando abrimos o ficheiro para escrita, ele iniciado como ficheiro vazio ( criado como novo ficheiro ).

Introduo aos Computadores 2012-2013

71

Curiosidade
Qual o resultado deste comando? echo '1337 5p34k !5 n07 5p0k3n 4m0n9 2341 h4ck325' | tr '01234579!' 'olreastgi'

Introduo aos Computadores 2012-2013

72

Curiosity

....... leet speak is not spoken among real hackers

Introduo aos Computadores 2012-2013

73

Variveis
Variveis so definidas por um nome, por exemplo: varname=value Sem espaos! Contedo da varivel varname: $varname $ world=mundo $ echo "Meu $world" Meu mundo H vrias variveis pr-definidas no sistema ($USER $SHELL ... etc)
Introduo aos Computadores 2012-2013

74

Variveis especiais
$0, $1, $2, etc. so parmetros (argumentos) posicionais, passados na linha de comando para um script, uma funo ou atribudos a uma varivel $# Nmero de argumentos na linha de comando $* lista de todos os argumentos numa palavra nica. "$*" precisa estar entre aspas $@ Smesmo que $*, mas cada argumento vem numa palavra separada
Introduo aos Computadores 2012-2013 75

Script simples
#!/bin/bash tr ' ' '\n' $1 | grep '^[[:upper:]]' | wc -l $1 se refere ao primeiro argumento passado ao script '^[[:upper:]]' uma expresso regular
^ se refere ao incio da linha [[:upper:]] qualquer letra maisculas

Introduo aos Computadores 2012-2013

76

The Stream Editor (sed)


sed um editor de linhas, porm muito poderoso sed 's/regexp/txt/g' - substituio sed 's/not guilty/guilty/g' filename Substitui not guilty por guilty no ficheiro filename O que acontece se no usarmos o g?

Introduo aos Computadores 2012-2013

77

The Stream Editor (sed)


sed '/regexp/d' - remoo sed '/[Dd]avid/d' filename > filename2 Remove todas as linhas que contm as palavras David ou david de filename e salva o resultado no ficheiro filename2

Introduo aos Computadores 2012-2013

78

Por que sed?


sed til nos seguintes casos:
Seus ficheiros so muito grandes para serem editados manualmente e interativamente Sua sequncia de comandos de edio muito longa para ser digitada em modo interativo Voc quer aplicar mudanas globais ao ficheiro em somente um passo

Introduo aos Computadores 2012-2013

79

sed entende expresses regulares


sed trata tudo que est entre o par de barras como expresso regular
sed 's/[[:alpha:]]\{1,3\}[[:digits:]]*@up\.pt/porto email removed/g' file

Substitui todos os endereos de email da Uporto com domnio up.pt pela frase porto email removed em file Com a opo -r entende expresses regulares estendidas
Introduo aos Computadores 2012-2013 80

sed
Alm de substituio e remoo, sed tambm pode:
Concatenar linhas trocar linhas inserir linhas mostra linhas etc

Introduo aos Computadores 2012-2013

81

sed Arkanoid
sed uma linguagem de programao. Exemplo de jogo escrito em sed: http://aurelio.net/soft/sedarkanoid/

Introduo aos Computadores 2012-2013

82

Aritmtica
Bash interpreta expresses aritmticas se estiverem entre parnteses duplos (( )). Uma expresso aritmtica retorna 0 se o valor for no zero e 1 se o valor for 0 (;-)) Se queremos o resultado do clculo escrevemos: $((exprmath)) Entre os parnteses duplos, as substituies de valores de variveis so feitos automaticamente sem a necessidade do $ antes do nome da varivel
Introduo aos Computadores 2012-2013 83

Aritmtica

Introduo aos Computadores 2012-2013

84

Passagem de parmetros/argumentos para um script

Quando passamos argumentos a um script bash, acedemos seus valores usando: $1, $2, ... ${10}, ${11} so os valores do primeiro, segundo etc argumentos $0 nome do script $# - Nmero de argumentos $* - Todos os argumentos, "$*" expandido para "$1 $2 ... $n",
Introduo aos Computadores 2012-2013 85

Passagem de parmetros/argumentos para um script

$@ - Todos os argumentos, "$@" expandido para "$1" "$2" ... "$n" O mais comum usar $@ em vez de $* $? cdigo de sada do ltimo programa execurtado $$ - identificador UNIX (nico) do processo corrente

Introduo aos Computadores 2012-2013

86

O comando if
Estrutura: if cmd1 then cmd2 cmd3 elif cmd4 then cmd5 else cmd6 fi if cmd1 then cmd2; cmd3 elif cmd4 then cmd5 else cmd6 fi
Cada expresso condicional avaliada true se cmd executar com sucesso (retornar um cdigo de sada igual a zero) podemos usar o smbolo ; para escrever sequncias de comandos na mesma linha a estrutura da esquerda equivalente ao da direita
Introduo aos Computadores 2012-2013 87

Exemplo 1
if cmp file1 file2 then echo "Files are the same" else echo "Files are different" fi

Introduo aos Computadores 2012-2013

88

Exemplo 2
if grep -q bash filename then echo "There is at least one instance of bash in $1" fi

Introduo aos Computadores 2012-2013

89

Exemplo 3
#! /bin/bash # Este script procura um texto num ficheiro # e retorna se o texto foi ou no encontrado # Se o texto no for encontrado, adiciona-o ao # ficheiro if grep "$1" $2 &> /dev/null then echo "$1 found in file $2" else echo "$1 not found in file $2, appending." echo $1 >> $2 Introduo aos Computadores 2012-2013 fi

90

Expresses de teste
Bash tem uma sintaxe especial de teste na forma [ testexpr ] Para comparar dois nmeros:
n1 -eq n2 testa se n1 = n2 n1 -ne n2 testa se n1 6= n2 n1 -lt n2 testa se n1 < n2 n1 -le n2 testa se n1 n2 n1 -gt n2 testa se n1 > n2 n1 -ge n2 testa se n1 >= n2

Se n1 ou n2 no forem nmeros, o teste falha


Introduo aos Computadores 2012-2013 91

testes

#! /bin/bash # Created on [2/20/2009] by David Slater # Purpose of Script: Searches a file for two strings and prints which is more frequent # Usage: ./ifeq.sh <file> string1 string2 arg=`grep $2 $1 | wc -l` arg2=`grep $3 $1 | wc -l` if [ $arg -lt $arg2 ] then echo "$3 is more frequent" elif [ $arg -eq $arg2 ] then frequent" echo "Equally frequent" else echo "$2 is more frequent" frequent" fi Note: Could have used (( $arg < $arg2 )) and (( $ arg == $arg2 ))

Introduo aos Computadores 2012-2013

92

Comparao de strings
Forma:
s1 == s2 - s1 e s2 so idnticas? s1 != s2 - s1 e s2 so diferentes? s1 - s1 no a string nula

Aqui necessrio usar os espaos! s1==s2 vai falhar!!!

Introduo aos Computadores 2012-2013

93

Comparao de strings
Combinao de testes: if [[ testexp1 && testexp2 ]] then cmd fi && - e ( -a for test ) || - ou ( -o for test ) ! testexp1 - not (mesmo smbolo para a sintaxe de teste vista antes)
Introduo aos Computadores 2012-2013 94

Teste em nome de ficheiros e diretrios


Se path for uma string que indica um caminho, podemos testar se um caminho vlido, o tipo de um ficheiro e suas permisses:
-e path testa se o caminho existe -f path testa se o caminho um ficheiro -d path testa se o caminho um diretrio -r path testa se voc tem permisso de leitura para um ficheiro -w path testa se voc tem permisso de escrita para um ficheiro -x path testa se voc tem permisso de execuo para um ficheiro
Introduo aos Computadores 2012-2013 95

[[ versus [
[ sinnimo de teste [[ uma verso melhorada do teste. Tm muitas coisas em comum, mas algumas diferenas

Introduo aos Computadores 2012-2013

96

[[ versus [
Comparao de strings:
[[ usa > [[ usa < [ usa \> [ usa \<

[[ usa && and || [ usa -a and -o [[ usa ~= para matching de expresses

regulares [ no permite o uso de expresses regulares [[ usa = for pattern matching [ no permite pattern matching
Introduo aos Computadores 2012-2013

97

[[: exemplos
[[ $name = a* ]] || echo "name does not start with an 'a': $name [[ $(date) =~ ^Fri\ ...\ 13 ]] \ && echo "It's Friday the 13th!"

Introduo aos Computadores 2012-2013

98

Comando de iterao: while


while cmd do cmd1 cmd2 done Executa cmd1, cmd2, se cmd for bem sucedido (isto , se seu cdigo de retorno for 0).
Introduo aos Computadores 2012-2013

99

Comando de iterao: while - exemplo


i="1" while [[ $i -le 10 ]] do echo "$i" i=$(($i+1)) done Este ciclo imprime todos os nmeros inteiros entre 1 e 10. Alternativa: while (( i <= 10))
Introduo aos Computadores 2012-2013 100

Comando de iterao: until


until cmd do cmd1 cmd2 done Executa cmd1, cmd2 se cmd for bem sucedido (isto , se seu cdigo de retorno for 0).
Introduo aos Computadores 2012-2013

101

Comando de iterao: until - exemplo


i="1" until [[ $i -ge 11 ]] do echo i is $i i=$(($i+1)) done

Introduo aos Computadores 2012-2013

102

Comando de iterao: for


for var in string1 string2 ... stringn do cmd1 cmd2 done O ciclo for tem uma sintaxe variada. Esta sintaxe apenas um exemplo
Introduo aos Computadores 2012-2013 103

Comando de iterao: for - exemplo


#! /bin/bash # lcountgood.sh i="0" for f in "$@" do j=`wc -l < $f` i=$(($i+$j)) done echo $i Este script conta o nmero de linhas de um conjunto de ficheiros. Para contar o nmero de linhas de todos os ficheiros no seu diretrio corrente, basta executar: ./lcountgood.sh *
(assumindo que o script foi gravado com o nome lcountgood.sh)
104

Introduo aos Computadores 2012-2013

Comando de iterao: for - exemplo


O que acontece se trocarmos o $@ por $*? #! /bin/bash # lcountbad.sh i="0" for f in "$*" No funciona! Por que? do j=`wc -l < $f` i=$(($i+$j)) done echo $i
Introduo aos Computadores 2012-2013 105

Comando de iterao: for


Podemos tambm usar a sintaxe: for i in {1..10} do echo $i done Imprime nmeros no intervalo 1 a 10 bash expande {1..10} antes do for executar Sintaxe: {start..end..increment}
Introduo aos Computadores 2012-2013 106

Lendo entrada do utilizador


$ read -p "How many apples do you have? " apples How many apples do you have? 5 $ echo $apples 5
Nota: p obriga a omitir o newline aps a pergunta aparecer no ecr para o utilizador

Introduo aos Computadores 2012-2013

107

Lendo de ficheiros
Podemos ler iterativamente linhas de um ficheiro em disco cat datafile | while read line do if (( $line < 10 )) then echo $line fi done
Introduo aos Computadores 2012-2013 108

Referncias
[1] D. M. Ritchie and K. Thompson, The UNIX Time-Sharing System, Communications of the ACM, 1974, v. 17, pp. 365375. [2] W. Richard Stevens and Stephen A. Rago, Advanced Programming in the UNIX Environment, 2ed., Addison-Wesley Professional, 2005. [3] Marc J. Rochkind, Advanced Unix Programming, 2ed., AddisonWesley Professional, 2004. [L1] Advanced Unix Programming Home: http://basepath.com/aup/ [L2] Advanced Bash-Scripting Guide: http://tldp.org/LDP/abs/html/ [L3] Advanced Linux Programming http://www.advancedlinuxprogramming.com/ [L4] Basic Unix commands by Philippe Renard: http://members.unine.ch/philippe.renard/unix1.html [L5] Advanced Unix commands by Philippe Renard: http://members.unine.ch/philippe.renard/unix2.html 109 Introduo aos Computadores 2012-2013

Вам также может понравиться