sac - aula 1

46
1 Linux: Estudo de Casos Em Ciências da Terra Prof. George Sand Monitor: Débora Matos Curso de Extensão: 2010

Upload: george-franca

Post on 21-Jun-2015

488 views

Category:

Education


3 download

TRANSCRIPT

Page 1: SAC - Aula 1

1

Linux: Estudo de Casos Em Ciências da Terra

Prof. George Sand Monitor: Débora Matos

Curso de Extensão: 2010

Page 2: SAC - Aula 1

2

Programa

• (25/01) (14:00 as 17:30) Linux – Conceitos básicos• (26/01) (14:00 as 17:30) Linux – Introdução aos scripts. • (27/01) (14:00 as 17:30) Seismic Analysis Code – Conceitos

básicos • (28/01) (14:00 as 17:30)SAC – Macros e geração de imagens

Page 3: SAC - Aula 1

3

Aula 1: Conceitos Básicos do Linux

• O Linux é um sistema operacional multi-tarefa e multi-usuário, o que significa que muitas pessoas podem rodar aplicações diferentes em um computador ao mesmo tempo.

• Para se identificar, você deve “logar” no sistema. LOGIN e SENHA! Para o nosso curso o seu o login e a senha é aula

login:training

password: obsis123

Page 4: SAC - Aula 1

4

Vamos começar!

• Clique duas vezes no ícone Terminal.OBS: Linux considera a diferença entre a letra

maiúscula e minúscula.• Manipulação de Diretórios

– ls [opções] [caminho/arquivo]• opções

– -a lista todos os arquivos de um diretório

– - l lista as permissões, data de modificações, donos,...etc

– - F Insere um caractere após o arquivo executáveis (‘*’), diretórios(‘/’),....

– - r Inverte a seqüência da ordenação

– - X ordena pela extensão

• Exemplo:ls lista os arquivos do diretório atual.ls /bin /sbin lista os arquivos do diretório /bin/sbin.ls –la /bin listagem detalhada e completa dos

arquivos do diretório /bin.EXERCÍCIO:Teste outras opções e veja o que

realmente mostra (use o seu diretório e o /bin).

Page 5: SAC - Aula 1

5

O comando cd e pwd

• cd [diretório]– Mudar o diretório de trabalho

atual.– “.” Se refere ao diretório corrente,

“..” ao diretório inferior, e “~” é o diretório padrão do usuário.

• pwd – Mostra o caminho do diretório

atual

• Exemploscd / muda para o diretório raiz.cd /etc muda para o diretório /etc.cd - retorna ao diretório

anteriormente acessadopwd EXERCÍCIO:Após cada comando acima digite pwd

e veja o caminho. Qual o comando que leva você para o

diretório /usr/local e depois retorna para o seu diretório

Page 6: SAC - Aula 1

6

Comando mkdir e rmdir

• mkdir [opções] [caminho/diretório]

– Cria um novo diretório

• rmdir [caminho/diretório] – Remove os diretórios– O diretório a ser removido

deve estar vazio e você deve ter permissão para removê-lo.

• Exemplomkdir /home/training/teste cria o

diretório teste em /home/aulamkdir teste1 teste2 cria os

diretórios teste1 e teste2. rmdir /home/training/teste remove o

diretório teste em /home/aula.EXERCÍCIO

Crie um diretório com seu nome e mude para esse diretório. Mostre o caminho.

Remova os diretórios teste1 e teste2

Page 7: SAC - Aula 1

7

Manipulação do arquivosrm e cp

• rm [opções] [caminho/diretório]– Remove os arquivos– - i confirma antes de remover.– - f remove os arquivos sem confirmação– - r Usado para remover arquivos em sub-

diretórios.• cp [opções] [origem] [destino]

– Copia arquivos– - f , –i, -r tem o mesmo significado do rm.– -u copia somente se o arquivo de origem é

mais novo que o arquivo de destino ou quando o arquivo de destino não existe.

• Exemplos:echo ‘teste’ > lixo.txt Não se preocupe com isso agoraecho ‘teste’ > lixo1.txtrm lixo.txt Remove o arquivo lixo.txt do diretório atual.rm *.txt Remove todos os arquivos que terminam com txt.echo ‘teste’ > lixo.txtcp lixo.txt lixo1.txt copia o arquivo lixo.txt para lixo1.txt.cp lixo.txt /tmp copia o arquivo lixo.txt para o diretório tmp.ExercíciosRemova o arquivo lixo.txt do diretório /tmp, copie

o arquivo lixo1.txt para /tmp e liste o diretório tmp.

Qual o comando para confirmar copia antes de substituir o arquivo lixo1.txt?

Page 8: SAC - Aula 1

8

Comandos mv

• mv [opções] [origem] [destino]– Renomeia ou move arquivos

e diretórios– Semelhante ao comando cp

mas o arquivo de origem é apagado após o término da cópia.

– -f substituir o arquivo sem perguntar

– -i Pergunta antes de substituir.

– -u move somente arquivos novos

• Exemplomv lixo.txt lixo1.txt muda o nome do arquivo lixo.txt

lixo1.txt mv lixo1.txt /tmp move o arquivo lixo1.txt do

diretório atual para /tmp.

EXERCÍCIO mover o lixo1.txt do diretório

/tmp para o diretório atual.

Page 9: SAC - Aula 1

9

Comandos cat e more

• cat [opções] [diretório/arquivos1]... [diretório/arquivos]

– Usando para concatenar arquivos, mas também usado para mostrar o conteúdo completo de um arquivo por vez.

– -n mostra o número das linhas enquanto o conteúdo é mostrado.

• more [arquivo]– Permite fazer a paginação de

arquivos. – Para sair pressione q

• Exemploecho ‘lixo’ > lixo.txtecho ‘lixo2’ >> lixo.txtcat lixo.txtmore lixo.txtcat /etc/passwd | moreExercícioCrie os arquivos lixo1.txt e

lixo.txt (pg 7) e concatene em novo lixo2.txt.

cat lixo1.txt lixo.txt cat lixo1.txt lixo.txt > lixo2.txt

Page 10: SAC - Aula 1

10

Camandos head e tail

• head [opções] [arquivo]– Mostre as linhas iniciais de um

arquivo texto.– - c mostra o número de bytes

do início do arquivo.– - [numero] mostra o número

de linhas do início do arquivo. Caso não seja especificado, mostra as 10 primeiras linhas.

• tail [opções] [arquivo]– Mostra as linhas finais de um

arquivo texto.– -c e – [número]

• Exemplohead /etc/passwdhead -20 /etc/passwdtail /etc/passwdtail -20 /etc/passwdhistory | head -15history | tail -15ExercícioQual a diferença entre tail, more e

head.

Page 11: SAC - Aula 1

11

Comando wc e sort• wc [opções] [arquivo]

– Conta o número de palavras, bytes e linhas em um arquivo.

– -c mostra os bytes– -w mostra a quantidade de palavras– -l mostra a quantidade de linhas

• sort [opções] [arquivo]– -b ignora linhas em branco– -d Somente usa letras, dígitos e espaços

durante a organização– -f ignora a diferença entre maiúsculas e

minúsculas.– -n números serão organizados em ordem

aritmética– -c Verifica se o arquivo está organizado. – - t caractere Usa caractare como

delimitador durante a organização de linhas– +num1 –num2 Especifica qual o campo

dentro da linha que será usado na organização.

• Exemplowc /etc/passwd mostra linhas, palavras e letraswc –w /etc/passwd mostra a quantidade de palavras.sort /etc/passwd organiza em ordem crescentesort –r /etc/passwd organiza em ordem decrescentesort –f /etc/passwd ignora diferenças entre maiúsculas e

minúsculas. sort +1 -3 /etc/passwd organiza o passwd usando como referência a

segunda até quarta palavra.EXERCÍCIOQual comando acima é o mesmo que cat /etc/passwd | sort ?

Page 12: SAC - Aula 1

12

Comando Diff

• Diff [diretório/arquivo1] [diretório/arquivo2] [opções]

– Compara dois arquivos e mostra as diferenças entre eles.

– - a compara como arquivo texto– - b ignora espaços em branco como

diferenças– -B ignora linhas brancas inseridas

ou apagadas nos arquivos– -I ignora diferença entre

maiúsculas e minúsculas.– - q Mostra somente se os dois

arquivos possuem diferenças.– - r compara sub-diretórios

existentes.– - s [nome] inicia a comparação de

diretórios pelo arquivo [nome].

• Exemplodiff lixo.txt /etc/passwd compara o arquivo lixo.txt com o arquivo passwddiff –r /usr/src/linux-headers-2.6.17-10

/usr/src/linux-headers-2.6.17-10-generic > patch.2.6.16.diff

compara o diretório e sub-diretórios linux-2.6 e grava as dferenças entre eles no arquivo patch.2.6.16.diff

EXERCÍCIOMostre na tela o arquivo patch.2.6.16.diff e

compare com o arquivo /etc/passwd

Page 13: SAC - Aula 1

13

Permissão de arquivos

• Linux permite que arquivos sejam compartilhados entre usuários e grupos de usuários. • Cada arquivo pertence a um usuário particular. Entretanto, arquivo pertence a um grupo, que

definido de usuários do sistema. Cada usuário é colocado em pelo menos um grupo quando sua conta é criada.

• Permissões são definidas em três tipos: leitura(r), escrita(w) e execução(x). • Essas permissões podem ser concedidas a três tipos de usuários: dono do arquivo, o grupo ao qual

o arquivo pertence, e a todos usuários. • ls –l drwxr-xr-- 12 aluno1 users 4096 2006-12-05 15:23 aluno1-rwxr-xr-- 12 marina users 4096 2006-11-08 17:12 aluno21º. Caracter representa o tipo de arquivo “-” representa arquivo comum e “d” diretório.Os próximos três caracteres (“rwx”) representam as permissões concedidas ao dono do arquivo, aluno1

ou marina. Os próximos três caracteres (“r-x”) representam as permissões do grupo. O usuário pertencente ao

grupo poderá ler e executar o arquivo.Os próximos três caracteres (“r—”) representam as permissões para qualquer usuário do sistema.

Outros usuários podem ler o arquivo, mas não escrever ou executar.EXERCÍCIO

Descreva que tipo permissão é essa –rw--wx---?

Page 14: SAC - Aula 1

14

Modificando as permissões• chmod {a,u,g,o}{+,-}{r,w,x}arquivos • As primeiras letras indicam a quem você está

concedendo ou retirando permissões– a “all”– u usuário– g grupos– o outros

• Depois especifique se está adicionando (+) ou retirando(-) direitos.

• E por fim, especifique o tipo de permissão: leitura (read), escrita(write) e execução (execute).

• Exemplols –l lixo.txtchmod a+r lixo.txt Dá permissão de leituras para todos

usuárioschmod +r lixo.txt é a mesma coisa.chmod og-x lixo.txt remove permissão de execução de

usuários que não o próprio dono.EXERCÍCIOPermita que o dono leia, escreva e

execute o arquivo lixo.txtRemova as permissões de leitura

para outros usuários que não sejam o dono ou usuários do grupo para o arquivo lixo.txt

Page 15: SAC - Aula 1

15

Comando de Busca

• grep [expressão] [arquivo] [opções]– - A [número] mostra o número de

linhas após a linha encontrada pelo grep– - B [número] mostra o número de

linhas antes a linha encontrada pelo grep– - f [arquivo] Especifica que o texto

que será localizado está no arquivo.– - i ignora a diferença entre maiúscula

e minúscula. – - n mostra o nome de cada linha

encontrada pelo grep– -U trata o arquivo que será tratado

como binário.

• Exemplogrep “data” /etc/passwd ps –aux | grep inetd grep “data” /etc/passwd -

A12 –B15grep -n “sh” /etc/passwd ExercícioQual a linha está o texto /bin/

no arquivo /etc/passwd?

Page 16: SAC - Aula 1

16

Redirecionamentos e pipes• stdin entrada padrão (standard

input)• stdout saída padrão (standard out)• Quando não especifica o arquivo, por

exemplo; o comando cat, vai ler dados stdin e mandar dados para stdout.

• Exemplocat OláOláByeBye {ctrl-D}

Agora você quer mudar a saída do sort para um arquivo, para gravar sua lista de compras no disco. A saída padrão é direcionada usando o simbolo”>”

sort > lista_de_eventosNorte do PeruJoão CâmaraFaixa Tocantins{ctrl-D}cat lista_de_eventos

Saida não-destrutiva Exemplocat >> lista_de_eventosPlataformaSan JuanSantiago Del Estero{ctrl-D}

Page 17: SAC - Aula 1

17

Use o pipe

ls > listasort –r lista • Gravou a saída do ls num arquivo lista, e então executou “sort –r”.

Esse arquivo temporário não será usado. Existe outra maneira de fazer isso?

• PIPES (|), o stdout do primeiro comando é enviada para o stdin do segundo comando. No caso acima, queremos mandar o stdout do ls para o stdin do sort.

ls | sort –rEXERCÍCIO

Mostre a saída de uma lista de arquivos em /usr/bin, onde você poderá paginar.

Use mais pipes adicione o comando “tail -1” no exemplo “ls | sort –r” e veja o que acontece

Page 18: SAC - Aula 1

18

Tarefa em segundo plano, abortando

tarefas, parando tarefas. yes > lixo• Esse processo continua infinitamente. Para

matar o processo clique a tecla (Ctrl-C). head lixo • Para colocar o processo em segundo plano é

necessário usar o caractere “&”.gedit lixo &[1] 25273jobs[1] + Running yes > lixo • O processo yes está rodando em segundo plano.

Para matar a tarefa, use o comando kill e use como argumento um dos número acima.

kill %1 ou kill 25273Jobs

• PARANDO TAREFASgedit lixo{ctrl-Z}[1] + gedit lixo > lixo• Crtl-Z pára temporariamente até que você

reinicie.• Para reiniciar use o comando “fg”

(foreground)fg • A tarefa volta para o primeiro plano, Pare a

tarefa novamente com ctrl-Z e use o comando bg para colocar a tarefa em segundo plano

{ctrl-z}bg [1] + yes > lixo.

Page 19: SAC - Aula 1

19

Editores

• Existem diversos editores

vi (editor)

emacs(editor)

Open Office

nedit (editor)

gedit – Vamos usar esse no curso

gedit lixo &

Page 20: SAC - Aula 1

20

Introdução ao comando awk• O nome é derivado das iniciais de seus três criadores, Aho, Kernighan, e

Weinberger. Funciona com pipes ou diretamente com arquivos. • Sua importância

– se for necessário fazer frequentemente alterações em vários arquivos texto, onde quer que seja que certos padrões apareçam;

– se for necessário extrair dados de algumas linhas de um arquivo enquanto o resto é descartado. Ou seja, com awk é possível gerenciar tarefas simples de "reformatar dados" com apenas algumas linhas de código.

• Com awk é possível: gerenciar pequenos banco de dados pessoais; gerar relatórios; validar dados; produzir índices, e fazer outras tarefas de preparação de documentos; fazer experimentos com algoritmos que podem ser adaptados posteriormente a outras linguagens de programação.

•   awk [ação] [Programa] [Arq1Entrada] [Arq2Entrada]

Page 21: SAC - Aula 1

21

Vamos começar awkVamos começar awk

• Use o comando cat para criar o arquivo terremoto.txt2007/07/31 21:09:20.9000 -3.024 36.423 10 4.7 MB QED TANZANIA2007/07/31 19:38:33.5000 -13.862 170.494 635 4.6 MB QED VANUATU ISLANDS2007/07/31 15:07:36.1000 27.336 126.852 16 5.7 MS QED RYUKYU ISLAND2007/07/31 12:58:29.1000 28.227 138.979 509 5.2 MB QED BONIN ISLANDS 2007/07/30 23:37:50.3000 -17.262 -178.777 560 5.1 MB QED FIJI ISLANDS2007/07/30 10:38:37.6000 1.998 97.946 30 4.9 MB QED SUMATRA2007/07/30 06:20:34.6000 46.857 152.623 10 4.8 MB QED KURIL ISLANDS----------------------------------- Agora faça cada comando e veja o resultado. awk ‘/MB/’ terremoto.txt mostra somente as linhas que contem o texto MBawk ‘{print $3, $4}’ terremoto.txt mostra o campo 3 e 4 do arquivo terremoto.txtawk ‘/MB/ {print $3, $4}’ terremoto.txt O que esse comando faz? awk ‘/S/’ terremoto.txt mostra as linhas que contem o caractere Sawk ‘$1 ~ /1/’ terremoto.txt o operador ~ mostra todas as linhas que contem o número 1 no

primeiro campoawk ‘$6 == 4.6 {print $2, $1, $6}’ terremoto.txt compara o número do sexto campo com valor 4.6.

Page 22: SAC - Aula 1

22

awk ‘$5 <= 100’ terremoto____________________________• o operador && -- “e” duas o mais condições.awk ‘$5 >= 500 && $5 <600’ terremoto• O operador “,” seleciona o grupo de linhas. awk ‘/TANZANIA/,/SUMATRA/’ terremoto.txtUse o gedit para criar o arquivo pre_inicio com o texto BEGIN {print “Data hora Lat Lon Prof Mag Regiao”}{print}• Para inserir comandos em arquivo usa-se a opção –f antes do nome contendo o programa

em awk.• Usando BEGIN . O programa pre_inicio usa BEGIN para inseri cabeçario.awk –f pre_inicio terremoto• Função length sem argumento mostra o número de caracteres na linha, incluindo os espaços.

A variável $0 imprime toda a linha. awk ‘{print length, $0}’ terremoto | sort• NR – referente o número de linha• NF – referente o número de campos• FS – insere um espaço• RS – insere uma nova linhaEXERCÍCIOVeja o que o comando awk ‘length > 40 {print NR}’ terremotoMostre do arquivo somente as linhas três quatro e cinco do arquivo terremoto.

Page 23: SAC - Aula 1

23

• END similar ao BEGIN

awk ‘END {print NR, “eventos.”}’ terremoto

• Usando o comando “if” para mudar o tipo de magnitude.

• Edite o programa awk altera_mag (use gedit ou cat)

{

if ($7 ~ /MB/) $7 = “MS”

if ($7 ~ /MS/) $7 = “MB”

print

}

awk –f altera_mag terremoto

Page 24: SAC - Aula 1

24

Printf (awk)• Controla a saída do print de acordo com formato. printf “formato do caractere” arg1, arg2,...,argn.\n nova linha \t [-][-x.[y]]convx é extensão mínima do campo, e o .y o número de caracteres a direita do ponto decimal. Conv é a letra que

especifica o formato.convd decimale notação científica f específica de formato variávels caracteres.Exemplo:Edite o texto abaixo no arquivo printf_demoBEGIN {print “Data hora Lat Lon Prof Mag Regiao”}{print \ “----------------------------------------------------------------------”}{ if ($7 ~ /MB/) $7 = “MS”printf “%2.1f \t %10s \t %11s \t %8.3f \t %8.3f \t %3d magnitude \n”, $1, $2, $3, $4, $5, $6 }awk –f print_demo terremoto.

tab

Page 25: SAC - Aula 1

25

• Até amanhã!

Page 26: SAC - Aula 1

26

Aula 2: Shell Script• Começando!!!• Por exemplo, se de tempos em tempos você quer saber informações do sistema comohorário, ocupação do disco e os usuários que estão logados, é preciso digitar trêscomandos:datedfw• É melhor fazer um script chamado "sistema" e colocar estes comandos nele. O

conteúdo do arquivo "sistema" seria o seguinte:#!/bin/bashdatedfw• E para chamar este script, basta agora executar apenas um comando:./sistema (não esqueça do comando “chmod”, veja se está executável, se torne-o)• Isso é um Shell Script. Um arquivo de texto que contém comandos do sistema e

pode ser executado pelo usuário

Page 27: SAC - Aula 1

27

Primeiro Shell Script

• Escolher um nome para o script– Já temos um nome: sistema.

Use apenas letras minúsculas e evite acentos, símbolos e espaço em branco• Escolher o diretório onde colocar o script• Para que o script possa ser executado de qualquer parte do sistema, mova−o para um diretório que

esteja no seu PATH. • O que o PATH? É o local onde está todos os arquivos executáveis.cat > .bashrcexport PATH=$PATH:/home/aula/bin. /usr/local/sac/bin{ctrl-d}source .bashrc• Crie no seu HOME o diretório bin e dentro do diretório bin mova o arquivo sistema echo $PATH• Colocar a chamada do Shell na primeira linha - A primeira linha do script deve ser:#!/bin/bash• Para que ao ser executado, o sistema saiba que é o Shell quem irá interpretar estescomandos.• Tornar o script um arquivo executável

– Use o seguinte comando para que seu script seja reconhecido pelo sistema como um comando executável:

Page 28: SAC - Aula 1

28

Melhorando Shell Script• Executar os três comandos seguidos resulta num bolo de texto na

tela, misturando as informações e dificultando o entendimento. • O comando "echo" serve para mostrar mensagens na tela. Que tal

anunciar cada comando antes de executá-lo?#!/bin/bash (Vc poderá usar #!/bin/csh)echo "Data e Horário:"dateechoecho "Uso do disco:"dfechoecho "Usuarios conectados:"w• Para usar o echo, basta colocar o texto entre "aspas". Se nenhum

texto for colocado, uma linha em branco mostrada.

Page 29: SAC - Aula 1

29

Interagir com o Usuário

• Para o script ficar mais completo, vamos colocar uma interação mínima com o usuário,

pedindo uma confirmação antes de executar os comandos.

• O comando "read" leu o que o usuário digitou e guardou na variável RESPOSTA. Logo em seguida, o comando "test" checou se o conteúdo dessa variável era "n". Se afirmativo, o comando "exit" foi chamado e o script foi finalizado. Nessa linha há vários detalhes importantes:

– O conteúdo da variável é acessado colocando−se um cifrão "$" na frente

– O comando test é muito útil para fazer vários tipos de checagens em textos e arquivos

– O operador lógico E "&&", só executa o segundo comando caso o primeiro tenha sido OK. O operador OU é o "||"

#!/bin/bashecho "Vou buscar os dados do sistema. Posso

continuar? [sn] "read RESPOSTAtest "$RESPOSTA" = "n" && exitecho "Data e Horário:"dateechoecho "Uso do disco:"dfechoecho "Usuários conectados:"w

Page 30: SAC - Aula 1

30

Melhorar o Código do Script

• Com o tempo, o script vai crescer, mais comandos vão ser adicionados e quanto maior, mais difícil encontrar o ponto certo onde fazer a alteração ou corrigir algum erro. Para poupar horas de estresse, e facilitar as manutenções futuras, é preciso deixar o código visualmente mais agradável e espaçado, e colocar comentários esclarecedores.

• Basta iniciar a linha com um "#" e escrever o texto do comentário em seguida. Estas linhas são ignoradas pelo Shell durante a execução. O cabeçalho com informações sobre o script e seu autor também é importante para se ter uma visão geral do que o script faz, sem precisar decifrar seu código.

• Também é possível colocar comentários no meio da linha # como este

#!/bin/bash# sistema − script que mostra informações sobre o sistema# Autor: Fulano da Silva# Pede uma confirmação do usuário antes de executarecho "Vou buscar os dados do sistema. Posso continuar? [sn]

"read RESPOSTA# Se ele digitou 'n', vamos interromper o scripttest "$RESPOSTA" = "n" && exit# O date mostra a data e a hora correntesecho "Data e Horário:"dateecho# O df mostra as partições e quanto cada uma ocupa no discoecho "Uso do disco:"dfecho# O w mostra os usuários que estão conectados nesta

máquinaecho "Usuários conectados:"w

Page 31: SAC - Aula 1

31

Fixando conceitos básicos

• As variáveis são a base de qualquer script. É dentro delas que os dados obtidos durante a

• execução do script serão armazenados. Para definir uma variável, basta usar o sinal de

• igual "=" e para ver seu valor, usa−se o "echo":

• Não podem haver espaços ao redor do igual "=“

Exemplo:VARIAVEL="um dois tres“echo $VARIAVELum dois tresecho $VARIAVEL $VARIAVELum dois tres um dois tres

• Ainda é possível armazenar a saída de um comando dentro de uma variável. Ao invés de

• aspas, o comando deve ser colocado entre "$(...)", veja:

HOJE=$(date)echo "Hoje é: $HOJE"Hoje é: Sáb Abr 24 18:40:00 BRT 2004unset HOJEecho $HOJE

"unset" apaga uma variável.

Page 32: SAC - Aula 1

32

O comando test• O canivete suíço dos comandos do Shell é o "test", que consegue fazer

vários tipos de checagens, em números, textos e arquivos. Ele possui várias opções para indicar que tipo de teste será feito, algumas delas:

Page 33: SAC - Aula 1

33

Exemplo e Exercício• Em todos as comandos que aceitam condições (ex. if, while)

deve ser posto um comando nessa condição, sendo avaliado o valor devolvido por esse comando.

if ls "$1" > /dev/null 2>&1;

then

echo true

else

echo false

fi Se o comando ls devolver true (0) o código relativo ao then é

executado, se devolver false (1) é executado o código relativo ao else.

o comando test pode ser simplificado na sua escrita para [ e fecha o comando ].

read arq

sistema

[ -f “$arq” ] && echo “$arq é um arquivo”

• Fazer o script "testa−arquivos", que pede ao usuário para digitar um arquivo e testa se este arquivo existe. Se sim, diz se é um arquivo ou um diretório.

Exemplo de uso:testa−arquivosDigite o arquivo: /naoexisteO arquivo '/naoexiste' não foi encontradotesta−arquivosDigite o arquivo: /tmp/tmp é um diretóriotesta−arquivosDigite o arquivo: /etc/passwd/etc/passwd é um arquivo

Page 34: SAC - Aula 1

34

Resposta

• testa-arquivos#!/bin/bash

echo -n "Digite o arquivo: "; read ARQUIVO[ -d "$ARQUIVO" ] && echo "$ARQUIVO é um diretorio"[ -f "$ARQUIVO" ] && echo "$ARQUIVO é um arquivo"[ -f "$ARQUIVO" -o -d "$ARQUIVO" ] ||echo "O arquivo '$ARQUIVO' nao foi encontrado"echo

Page 35: SAC - Aula 1

35

Referências

• Manual do awk (http://www.inf.pucrs.br/~manssour/AWK/index.html)

• Practical guide to the Unix system- M.K. Sobell Third Edition.

• Apostila do Aurélio (http://aurelio.net/shell/apostila/)

Page 36: SAC - Aula 1

36

If, For e While• Assim como qualquer outra linguagem de programação, o Shell

também tem estruturas para se fazer condicionais e loop. As mais usadas são if, for e while.

for VAR in LISTA

do

comandos

done

if COMANDOthen

comandoselse

comandosfiNo caso c shell é outro estrutura mais vamos nos fixar no C shell (endif)

whiledo

comandos done

Page 37: SAC - Aula 1

37

• Há um atalho para o test , que é o comando [. Ambos são exatamente o mesmo comando, porém usar o [ deixa o if mais parecido com o formato tradicional de outras linguagens:

#!/bin/bashecho "Digite o número: "; read

VARIAVELif [ "$VARIAVEL" −gt 10 ]then

echo "é maior que 10"else

echo "é menor que 10"fi

• o if testa um comando e não uma condição. Porém como já conhecemos qual o comando do Shell que testa condições, é só usá−lo em conjunto com o if. Por exemplo, para saber se uma variável é maior ou menor do que 10 e mostrar uma mensagem na tela informando:

if test "$VARIAVEL" −gt 10then echo "é maior que 10"else echo "é menor que 10"fi

Condição if

Page 38: SAC - Aula 1

38

Condição while e for

• Já o while é um laço que é executado enquanto um comando retorna OK. Usaremos o test (ou o [). Por exemplo, para segurar o processamento do script enquanto um arquivo de lock não é removido:

while test −f /tmp/lockdo sleep 1done

• o for percorre uma lista de palavras, pegando uma por vez:

for numero in um dois três quatro cinco

do

echo "Contando: $numero"

done

Page 39: SAC - Aula 1

39

Condição For• Uma ferramenta muito útil para usar com o for é o seq,

que gera uma seqüência numérica. Para fazer o loop andar 10 passos, pode−se fazer:

seq [opções] [primeiro] [incremento] [último] Primeiro Número inicial da seqüência. Incremento Número utilizado para avançar na

seqüência. Último Número final da seqüência.opções

-f, -Formato de saída dos números da seqüência. Utilize o estilo do printf para ponto flutuante. -s, Usa [string] para separar a seqüência de números . -w, zeros na frente dos números mantendo a seqüência alinhada.

seq 0 2 10seq -w 0 10 seq -f%f 0 10seq -s", " 0 10 -----------for passo in $(seq 10)

• O mesmo passo anterior pode ser feito com o while, usando um contador:

i=0while test $i −le 10doi=$((i+1))echo "Contando: $i"done• E temos ainda o loop infinito, com condicional de

saída usando o "break¨:

while :do

if test −f /tmp/lockthenecho "Aguardando liberação do lock...“

sleep 1else

breakfi

done

Page 40: SAC - Aula 1

40

ExercíciosVc também tem que aprender a se virar

sozinho!

1. relacao.sh -- >Recebe dois números como parâmetro e mostra a relação entre eles. Exemplo:

$ ./relacao.sh 3 53 é menor 5$ ./relacao.sh 5 35 é maior 3$ ./relacao.sh 5 55 é igual 5 Reposta#!/bin/shif [ $1 −eq $2 ] then

echo "$1 é igual $2"if [ $1 −lt $2 ] then

echo "$1 é menor $2"else

echo "$1 é maior $2"fi

_#!/bin/bashecho “digite o primeiro numero’read primecho ‘digie o segundo numero’read segIf [ $prim –eq $seg ]; then

echo “$prim é igual $seg“fiIf [ $prim –lt $seg ]; then echo “$prim é menor $seg”fiIf [ $prim –gt $seg ]; then

echo “$prim é maior $sef”fi

Page 41: SAC - Aula 1

41

zerador.shRecebe um número como parâmetro e o diminui até chegar a zero,

mostrando na tela cada passo, numa mesma linha.

• Exemplo:$ ./zerador.sh 55 4 3 2 1 0$ ./zerador.sh 1010 9 8 7 6 5 4 3 2 1 0

Resposta

#!/bin/bashi=$1while [ $i −ge 0 ]; do

echo −n "$i "i=$((i−1))

doneecho

Page 42: SAC - Aula 1

42

substring.shRecebe duas palavras como parâmetro e checa se a primeira

palavra está contida dentro da segunda. Só mostra mensagem informativa em caso de sucesso, do contrário não mostra nada.

• Exemplo:$ ./substring.sh ana bananaana está contida em banana$ ./substring.sh banana maria$ ./substring.sh banana$ ./substring.sh$Dica: Veja se o comando grep é

útil!

#!/bin/sh

[ $# −ne 2 ] && exitecho $2 | grep −qs $1 && echo "$1 está

contida em $2"

Page 43: SAC - Aula 1

43

juntatudo.shMostra na tela "grudados" todos os parâmetros recebidos na linha de

comando, como uma única palavra.

• Exemplo:

$ ./juntatudo.sh a b c d e f verde azul

abcdefverdeazul

• Pesquise sobre o comando tr

man tr

#!/bin/sh

echo $* | tr −d ' '

Page 44: SAC - Aula 1

44

users.shDo arquivo /etc/passwd, mostra o usuário e o nome completo de cada usuário do sistema (campos 1 e 5) separados por um TAB.

• Exemplo:$ ./users.shftp FTP Usernobody Nobodynamed Domain name serverxfs X Font Servermysql MySQL serveraula aula• Use os comandos cut e tr

#!/bin/shcat /etc/passwd | cut −d : −f 1,5 | tr : '\t'

Page 45: SAC - Aula 1

45

shells.shDo arquivo /etc/passwd, mostra todos os shells (último campo) que os

usuários usam. Não mostrar linhas repetidas.

• Exemplo:$ ./shells.sh/bin/bash/bin/false/bin/sync/sbin/halt/sbin/shutdown• Pesquise sobre o comando uniq

#!/bin/sh

cat /etc/passwd | cut −d : −f 7 | sort | uniq

Page 46: SAC - Aula 1

46

parametros.shMostra na tela todos os parâmetros recebidos na linha

de comando, contando−os.

• Exemplo:$ ./parametros.sh a b c d e fParâmetro 1: aParâmetro 2: bParâmetro 3: cParâmetro 4: dParâmetro 5: eParâmetro 6: f• Pesquise sobre o comando shift

#!/bin/bash

i=0while [ "$1" ] ; do

i=$((i+1))echo "Parâmetro $i: $1"shift

done