• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
SAC - Seismic Analyses Code
 

SAC - Seismic Analyses Code

on

  • 421 views

 

Statistics

Views

Total Views
421
Views on SlideShare
421
Embed Views
0

Actions

Likes
0
Downloads
5
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • awk ‘NR == 2, NR == 4’ terremoto

SAC - Seismic Analyses Code SAC - Seismic Analyses Code Presentation Transcript

  • Linux: Estudo de Casos Em Ciências da Terra Prof. George Sand Monitor: Débora Matos Curso de Extensão: 2010
  • 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
  • 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
  • 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).
  • 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
    • Exemplos
    • cd / muda para o diretório raiz.
    • cd /etc muda para o diretório /etc.
    • cd - retorna ao diretório anteriormente acessado
    • pwd
    • 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
  • 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.
    • Exemplo
    • mkdir /home/training/teste cria o diretório teste em /home/aula
    • mkdir 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
  • Manipulação do arquivos rm 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 agora
    • echo ‘teste’ > lixo1.txt
    • rm lixo.txt
    • Remove o arquivo lixo.txt do diretório atual.
    • rm *.txt
    • Remove todos os arquivos que terminam com txt.
    • echo ‘teste’ > lixo.txt
    • cp 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ícios
    • Remova 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?
  • 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
    • Exemplo
    • mv 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.
  • 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
    • Exemplo
    • echo ‘lixo’ > lixo.txt
    • echo ‘lixo2’ >> lixo.txt
    • cat lixo.txt
    • more lixo.txt
    • cat /etc/passwd | more
    • Exercício
    • Crie 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
  • 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]
    • Exemplo
    • head /etc/passwd
    • head -20 /etc/passwd
    • tail /etc/passwd
    • tail -20 /etc/passwd
    • history | head -15
    • history | tail -15
    • Exercício
    • Qual a diferença entre tail, more e head.
  • 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.
    • Exemplo
    • wc /etc/passwd
    • mostra linhas, palavras e letras
    • wc –w /etc/passwd
    • mostra a quantidade de palavras.
    • sort /etc/passwd
    • organiza em ordem crescente
    • sort –r /etc/passwd
    • organiza em ordem decrescente
    • sort –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ÍCIO
    • Qual comando acima é o mesmo que
    • cat /etc/passwd | sort ?
  • 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].
    • Exemplo
    • diff lixo.txt /etc/passwd
    • compara o arquivo lixo.txt com o arquivo passwd
    • diff –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ÍCIO
    • Mostre na tela o arquivo patch.2.6.16.diff e compare com o arquivo /etc/passwd
  • 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 aluno2
    • 1º. 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---?
  • 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 ( r ead), escrita( w rite) e execução (e x ecute).
    • Exemplo
    • ls –l lixo.txt
    • chmod a+r lixo.txt
    • Dá permissão de leituras para todos usuários
    • chmod +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ÍCIO
    • Permita que o dono leia, escreva e execute o arquivo lixo.txt
    • Remova 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
  • 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.
    • Exemplo
    • grep “data” /etc/passwd
    • ps –aux | grep inetd
    • grep “data” /etc/passwd -A12 –B15
    • grep -n “sh” /etc/passwd
    • Exercício
    • Qual a linha está o texto /bin/ no arquivo /etc/passwd?
  • 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 .
    • Exemplo
    • cat
    • Olá
    • Olá
    • Bye
    • Bye
    • {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_eventos
    • Norte do Peru
    • João Câmara
    • Faixa Tocantins
    • {ctrl-D}
    • cat lista_de_eventos
    • Saida não-destrutiva
    • Exemplo
    • cat >> lista_de_eventos
    • Plataforma
    • San Juan
    • Santiago Del Estero
    • {ctrl-D}
  • Use o pipe
    • ls > lista
    • sort –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 –r
    • EXERCÍ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
  • 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] 25273
    • jobs
    • [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 25273
    • Jobs
    • PARANDO TAREFAS
    • gedit 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.
  • Editores
    • Existem diversos editores
    • vi (editor)
    • emacs(editor)
    • Open Office
    • nedit (editor)
    • gedit – Vamos usar esse no curso
    • gedit lixo &
  • 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]
  • Vamos começar awk
    • Use o comando cat para criar o arquivo terremoto.txt
    • 2007/07/31 21:09:20.9000 -3.024 36.423 10 4.7 MB QED TANZANIA
    • 2007/07/31 19:38:33.5000 -13.862 170.494 635 4.6 MB QED VANUATU ISLANDS
    • 2007/07/31 15:07:36.1000 27.336 126.852 16 5.7 MS QED RYUKYU ISLAND
    • 2007/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 ISLANDS
    • 2007/07/30 10:38:37.6000 1.998 97.946 30 4.9 MB QED SUMATRA
    • 2007/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 MB
    • awk ‘{print $3, $4}’ terremoto.txt  mostra o campo 3 e 4 do arquivo terremoto.txt
    • awk ‘/MB/ {print $3, $4}’ terremoto.txt  O que esse comando faz?
    • awk ‘/S/’ terremoto.txt  mostra as linhas que contem o caractere S
    • awk ‘$1 ~ /1/’ terremoto.txt  o operador ~ mostra todas as linhas que contem o número 1 no primeiro campo
    • awk ‘$6 == 4.6 {print $2, $1, $6}’ terremoto.txt  compara o número do sexto campo com valor 4.6.
    • 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.txt
    • Use 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 linha
    • EXERCÍCIO
    • Veja o que o comando awk ‘length > 40 {print NR}’ terremoto
    • Mostre do arquivo somente as linhas três quatro e cinco do arquivo terremoto.
    • 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
  • 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]]conv
    • x é 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.
    • conv
    • d  decimal
    • e  notação científica
    • f  específica de formato variável
    • s  caracteres.
    • Exemplo:Edite o texto abaixo no arquivo printf_demo
    • BEGIN {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
    • Até amanhã!
  • Aula 2: Shell Script
    • Começando!!!
    • Por exemplo, se de tempos em tempos você quer saber informações do sistema como
    • horário, ocupação do disco e os usuários que estão logados, é preciso digitar três
    • comandos:
    • date
    • df
    • w
    • É melhor fazer um script chamado &quot;sistema&quot; e colocar estes comandos nele. O conteúdo do arquivo &quot;sistema&quot; seria o seguinte:
    • #!/bin/bash
    • date
    • df
    • w
    • 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
  • 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 > .bashrc
    • export 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 estes
    • comandos.
    • Tornar o script um arquivo executável
      • Use o seguinte comando para que seu script seja reconhecido pelo sistema como um comando executável:
  • 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 &quot;echo&quot; serve para mostrar mensagens na tela. Que tal anunciar cada comando antes de executá-lo?
    • #!/bin/bash (Vc poderá usar #!/bin/csh)
    • echo &quot;Data e Horário:&quot;
    • date
    • echo
    • echo &quot;Uso do disco:&quot;
    • df
    • echo
    • echo &quot;Usuarios conectados:&quot;
    • w
    • Para usar o echo, basta colocar o texto entre &quot;aspas&quot;. Se nenhum texto for colocado, uma linha em branco mostrada.
  • 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 &quot;read&quot; leu o que o usuário digitou e guardou na variável RESPOSTA. Logo em seguida, o comando &quot;test&quot; checou se o conteúdo dessa variável era &quot;n&quot;. Se afirmativo, o comando &quot;exit&quot; 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 &quot;$&quot; na frente
      • O comando test é muito útil para fazer vários tipos de checagens em textos e arquivos
      • O operador lógico E &quot;&&&quot;, só executa o segundo comando caso o primeiro tenha sido OK. O operador OU é o &quot;||&quot;
    • #!/bin/bash
    • echo &quot;Vou buscar os dados do sistema. Posso continuar? [sn] &quot;
    • read RESPOSTA
    • test &quot;$RESPOSTA&quot; = &quot;n&quot; && exit
    • echo &quot;Data e Horário:&quot;
    • date
    • echo
    • echo &quot;Uso do disco:&quot;
    • df
    • echo
    • echo &quot;Usuários conectados:&quot;
    • w
  • 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 &quot;#&quot; 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 executar
    • echo &quot;Vou buscar os dados do sistema. Posso continuar? [sn] &quot;
    • read RESPOSTA
    • # Se ele digitou 'n', vamos interromper o script
    • test &quot;$RESPOSTA&quot; = &quot;n&quot; && exit
    • # O date mostra a data e a hora correntes
    • echo &quot;Data e Horário:&quot;
    • date
    • echo
    • # O df mostra as partições e quanto cada uma ocupa no disco
    • echo &quot;Uso do disco:&quot;
    • df
    • echo
    • # O w mostra os usuários que estão conectados nesta máquina
    • echo &quot;Usuários conectados:&quot;
    • w
  • 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 &quot;=&quot; e para ver seu valor, usa−se o &quot;echo&quot;:
    • Não podem haver espaços ao redor do igual &quot;=“
    • Exemplo:
    • VARIAVEL=&quot;um dois tres“
    • echo $VARIAVEL
    • um dois tres
    • echo $VARIAVEL $VARIAVEL
    • um 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 &quot;$(...)&quot;, veja:
    • HOJE=$(date)
    • echo &quot;Hoje é: $HOJE&quot;
    • Hoje é: Sáb Abr 24 18:40:00 BRT 2004
    • unset HOJE
    • echo $HOJE
    • &quot;unset&quot; apaga uma variável.
  • O comando test
    • O canivete suíço dos comandos do Shell é o &quot;test&quot;, 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:
  • 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 &quot;$1&quot; > /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 &quot;testa−arquivos&quot;, 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−arquivos
    • Digite o arquivo: /naoexiste
    • O arquivo '/naoexiste' não foi encontrado
    • testa−arquivos
    • Digite o arquivo: /tmp
    • /tmp é um diretório
    • testa−arquivos
    • Digite o arquivo: /etc/passwd
    • /etc/passwd é um arquivo
  • Resposta
    • testa-arquivos
    • #!/bin/bash
    • echo -n &quot;Digite o arquivo: &quot;; read ARQUIVO
    • [ -d &quot;$ARQUIVO&quot; ] && echo &quot;$ARQUIVO é um diretorio&quot;
    • [ -f &quot;$ARQUIVO&quot; ] && echo &quot;$ARQUIVO é um arquivo&quot;
    • [ -f &quot;$ARQUIVO&quot; -o -d &quot;$ARQUIVO&quot; ] ||
    • echo &quot;O arquivo '$ARQUIVO' nao foi encontrado&quot;
    • echo
  • 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/)
  • 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 COMANDO then comandos else comandos fi No caso c shell é outro estrutura mais vamos nos fixar no C shell (endif) while do comandos done
    • 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/bash
    • echo &quot;Digite o número: &quot;; read VARIAVEL
    • if [ &quot;$VARIAVEL&quot; −gt 10 ]
    • then
    • echo &quot;é maior que 10&quot;
    • else
    • echo &quot;é menor que 10&quot;
    • 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 &quot;$VARIAVEL&quot; −gt 10
    • then
    • echo &quot;é maior que 10&quot;
    • else
    • echo &quot;é menor que 10&quot;
    • fi
    Condição if
  • 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/lock
    • do
    • sleep 1
    • done
    • o for percorre uma lista de palavras, pegando uma por vez:
    • for numero in um dois três quatro cinco
    • do
    • echo &quot;Contando: $numero&quot;
    • done
  • 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 10
    • seq -w 0 10
    • seq -f%f 0 10
    • seq -s&quot;, &quot; 0 10
    • -----------
    • for passo in $(seq 10)
    • O mesmo passo anterior pode ser feito com o while, usando um contador:
    • i=0
    • while test $i −le 10
    • do
    • i=$((i+1))
    • echo &quot;Contando: $i&quot;
    • done
    • E temos ainda o loop infinito, com condicional de saída usando o &quot;break¨:
    • while :
    • do
    • if test −f /tmp/lock
    • then
    • echo &quot;Aguardando liberação do lock...“
    • sleep 1
    • else
    • break
    • fi
    • done
  • Exercícios Vc também tem que aprender a se virar sozinho!
    • relacao.sh -- > Recebe dois números como parâmetro e mostra a relação entre eles. Exemplo:
    • $ ./relacao.sh 3 5
    • 3 é menor 5
    • $ ./relacao.sh 5 3
    • 5 é maior 3
    • $ ./relacao.sh 5 5
    • 5 é igual 5
    • Reposta
    • #!/bin/sh
    • if [ $1 −eq $2 ] then
    • echo &quot;$1 é igual $2&quot;
    • if [ $1 −lt $2 ] then
    • echo &quot;$1 é menor $2&quot;
    • else
    • echo &quot;$1 é maior $2&quot;
    • fi
    • _
    • #!/bin/bash
    • echo “digite o primeiro numero’
    • read prim
    • echo ‘digie o segundo numero’
    • read seg
    • If [ $prim –eq $seg ];
    • then
    • echo “$prim é igual $seg“
    • fi
    • If [ $prim –lt $seg ];
    • then
    • echo “$prim é menor $seg”
    • fi
    • If [ $prim –gt $seg ];
    • then
    • echo “$prim é maior $sef”
    • fi
  • zerador.sh Recebe um número como parâmetro e o diminui até chegar a zero, mostrando na tela cada passo, numa mesma linha.
    • Exemplo:
    • $ ./zerador.sh 5
    • 5 4 3 2 1 0
    • $ ./zerador.sh 10
    • 10 9 8 7 6 5 4 3 2 1 0
    • Resposta
    • #!/bin/bash
    • i=$1
    • while [ $i −ge 0 ]; do
    • echo −n &quot;$i &quot;
    • i=$((i−1))
    • done
    • echo
  • substring.sh Recebe 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 banana
    • ana está contida em banana
    • $ ./substring.sh banana maria
    • $ ./substring.sh banana
    • $ ./substring.sh
    • $
    • Dica: Veja se o comando grep é útil!
    • #!/bin/sh
    • [ $# −ne 2 ] && exit
    • echo $2 | grep −qs $1 && echo &quot;$1 está contida em $2&quot;
  • juntatudo.sh Mostra na tela &quot;grudados&quot; 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 ' '
  • users.sh Do 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.sh
    • ftp FTP User
    • nobody Nobody
    • named Domain name server
    • xfs X Font Server
    • mysql MySQL server
    • aula aula
    • Use os comandos cut e tr
    • #!/bin/sh
    • cat /etc/passwd | cut −d : −f 1,5 | tr : 't'
  • shells.sh Do 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
  • parametros.sh Mostra na tela todos os parâmetros recebidos na linha de comando, contando−os.
    • Exemplo:
    • $ ./parametros.sh a b c d e f
    • Parâmetro 1: a
    • Parâmetro 2: b
    • Parâmetro 3: c
    • Parâmetro 4: d
    • Parâmetro 5: e
    • Parâmetro 6: f
    • Pesquise sobre o comando shift
    • #!/bin/bash
    • i=0
    • while [ &quot;$1&quot; ] ; do
    • i=$((i+1))
    • echo &quot;Parâmetro $i: $1&quot;
    • shift
    • done