SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

DOCX
Comandos linux
PDF
Comandos basicos linux
PPTX
Introduction to linux
PPT
Comandos, Permissões e Partições Linux
PDF
Aula 06 comandos linux
PDF
Comandos Unix
PDF
Linux comandos para arquivos e diretórios
PPTX
Introdução aos comandos Linux
Comandos linux
Comandos basicos linux
Introduction to linux
Comandos, Permissões e Partições Linux
Aula 06 comandos linux
Comandos Unix
Linux comandos para arquivos e diretórios
Introdução aos comandos Linux

Mais procurados (17)

PPT
Comandos Linux Parte 1
PPT
Comandos Linux
 
PPT
Comandos Linux Parte 2
PDF
Comandos do linux
PDF
Guia com mais de 500 comandos do linux explicados computeiro da depressão
PDF
Cap1 exercicios comandos linux
ODP
Treinamento de comandos Unix e Linux
PDF
Linux comandos gerais e servidores de rede
PDF
Linux comandos diversos
PPTX
Aula 10 semana
PDF
Comandos do linux
PPTX
Aula 11 semana
PDF
Apostila(1)
PDF
Apostila de comandos linux resumidos (universidade católica de brasília)
DOCX
Comandos básicos linux
PDF
Curso de Shell Script 02/11
PDF
Linux permissoes de arquivos e diretorios
Comandos Linux Parte 1
Comandos Linux
 
Comandos Linux Parte 2
Comandos do linux
Guia com mais de 500 comandos do linux explicados computeiro da depressão
Cap1 exercicios comandos linux
Treinamento de comandos Unix e Linux
Linux comandos gerais e servidores de rede
Linux comandos diversos
Aula 10 semana
Comandos do linux
Aula 11 semana
Apostila(1)
Apostila de comandos linux resumidos (universidade católica de brasília)
Comandos básicos linux
Curso de Shell Script 02/11
Linux permissoes de arquivos e diretorios
Anúncio

Destaque (7)

PPTX
Welcome to i virtual assista
PPT
Alarm.0 Zack And Dennis
PPTX
Step Over It and Move on
PPTX
125 Park Ave Building Analysis
PDF
Forum_hotelier_Octobre2016
KEY
Digital Wellbeing Showroom 2006
Welcome to i virtual assista
Alarm.0 Zack And Dennis
Step Over It and Move on
125 Park Ave Building Analysis
Forum_hotelier_Octobre2016
Digital Wellbeing Showroom 2006
Anúncio

Semelhante a SAC - Seismic Analyses Code (18)

PPTX
Aula 10 semana
PDF
Apostila comandos unix
DOC
Comandos linux
PDF
Shell script do zero aula 1 - basico do basico e primeiros comandos
PDF
44087090 tutorial-programacao-batch
DOCX
Comandos básicos Linux.docx
DOC
Atividade programação script 1
PDF
Unidade 3.5 Permissões e Propriedades de Arquivos
PDF
Sistemas Operacionais - Gnu/Linux Gerenciamento de Arquivos
PDF
Principais comandos do terminal no linux tecnologia para todos!
PDF
Comandos linux
PDF
Comandos do Linux
PDF
Manual comandos
DOCX
Ficha de trabalho so 6 m4 linux comandos
PDF
Minicurso linux
PDF
Linux-formatado.pdf
PDF
Intro a Sistemas Abertos - Gerenciamento de Arquivos.pdf
DOCX
Ficha de trabalho so 6 m4 linux comandos
Aula 10 semana
Apostila comandos unix
Comandos linux
Shell script do zero aula 1 - basico do basico e primeiros comandos
44087090 tutorial-programacao-batch
Comandos básicos Linux.docx
Atividade programação script 1
Unidade 3.5 Permissões e Propriedades de Arquivos
Sistemas Operacionais - Gnu/Linux Gerenciamento de Arquivos
Principais comandos do terminal no linux tecnologia para todos!
Comandos linux
Comandos do Linux
Manual comandos
Ficha de trabalho so 6 m4 linux comandos
Minicurso linux
Linux-formatado.pdf
Intro a Sistemas Abertos - Gerenciamento de Arquivos.pdf
Ficha de trabalho so 6 m4 linux comandos

Último (20)

PDF
edital-de-chamamento-publico-no-3-2025.pdf
PDF
Pecados desdenhados por muita gente (islamismo)
PPT
1ª Telefonia Fixa Padrao Novo Jailton 2012_22.ppt
PDF
EXPRESSÕES IDIOMÁTICAS - LÍNGUA PORTUGUESA
PDF
Combate a Incêndio - Estratégias e Táticas de Combate a Incêndio por Francis...
PDF
Combate a Incêndio - Iluminação de Emergência e Sinalização de Segurança por ...
PPSX
A epistemologia de Wilheim G Leibniz.ppsx
PPTX
sistema nervoso aula 1 faculdade uniplam
DOC
PPP 2024 (2) (2) feito EM REELABORAÇÃO MORENA ( ABRIL 2024).doc
PPT
YY2015MM3DD6HH12MM42SS3-Organiza__o do Estado ILP.ppt
PPTX
NR11 - Treinamento Direcao Defensiva - 2023.pptx
PPTX
Ocupação e transformação dos territórios.pptx
PPT
br-a-1692841480-passeio-pela-historia-da-arte-apresentacao-em-powerpoint_ver_...
PDF
O retorno a origem (islã Islamismo)
PPTX
norma regulamentadora numero vinte nr 20
PDF
Uma Introdução às Ciências do Alcorão (Islam)
PDF
Fiqh da adoração (islamismo)
PDF
[Slides] A Literatura no ENEM 2017 (1).pdf
PDF
metabolismo energtico das clulas-131017092002-phpapp02.pdf
PPTX
Slides Lição 8, Betel, Jesus e a Mulher Adúltera, 3Tr25.pptx
edital-de-chamamento-publico-no-3-2025.pdf
Pecados desdenhados por muita gente (islamismo)
1ª Telefonia Fixa Padrao Novo Jailton 2012_22.ppt
EXPRESSÕES IDIOMÁTICAS - LÍNGUA PORTUGUESA
Combate a Incêndio - Estratégias e Táticas de Combate a Incêndio por Francis...
Combate a Incêndio - Iluminação de Emergência e Sinalização de Segurança por ...
A epistemologia de Wilheim G Leibniz.ppsx
sistema nervoso aula 1 faculdade uniplam
PPP 2024 (2) (2) feito EM REELABORAÇÃO MORENA ( ABRIL 2024).doc
YY2015MM3DD6HH12MM42SS3-Organiza__o do Estado ILP.ppt
NR11 - Treinamento Direcao Defensiva - 2023.pptx
Ocupação e transformação dos territórios.pptx
br-a-1692841480-passeio-pela-historia-da-arte-apresentacao-em-powerpoint_ver_...
O retorno a origem (islã Islamismo)
norma regulamentadora numero vinte nr 20
Uma Introdução às Ciências do Alcorão (Islam)
Fiqh da adoração (islamismo)
[Slides] A Literatura no ENEM 2017 (1).pdf
metabolismo energtico das clulas-131017092002-phpapp02.pdf
Slides Lição 8, Betel, Jesus e a Mulher Adúltera, 3Tr25.pptx

SAC - Seismic Analyses Code

  • 1. Linux: Estudo de Casos Em Ciências da Terra Prof. George Sand Monitor: Débora Matos Curso de Extensão: 2010
  • 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
  • 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
  • 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).
  • 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 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
  • 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. 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
  • 7. 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?
  • 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 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.
  • 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 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
  • 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] 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.
  • 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. 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 ?
  • 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]. 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
  • 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 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---?
  • 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 ( 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
  • 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. 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?
  • 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 . 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}
  • 17. 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
  • 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] 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.
  • 19. Editores Existem diversos editores vi (editor) emacs(editor) Open Office nedit (editor) gedit – Vamos usar esse no curso gedit lixo &
  • 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 &quot;reformatar dados&quot; 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]
  • 21. 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.
  • 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.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.
  • 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
  • 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]]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
  • 26. 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
  • 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 > .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:
  • 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 &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.
  • 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 &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
  • 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 &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
  • 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 &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.
  • 32. 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:
  • 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 &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
  • 34. 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
  • 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/)
  • 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 COMANDO then comandos else comandos fi No caso c shell é outro estrutura mais vamos nos fixar no C shell (endif) while do comandos done
  • 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/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
  • 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/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
  • 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 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
  • 40. 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
  • 41. 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
  • 42. 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;
  • 43. 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 ' '
  • 44. 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'
  • 45. 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
  • 46. 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

Notas do Editor

  • #23: awk ‘NR == 2, NR == 4’ terremoto