A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Curso de extensão em Administração de redes com GNU/Linux Italo Valcy - Gestores da Rede Acadêmica de Computação Departamento de Ciência.

Apresentações semelhantes


Apresentação em tema: "Curso de extensão em Administração de redes com GNU/Linux Italo Valcy - Gestores da Rede Acadêmica de Computação Departamento de Ciência."— Transcrição da apresentação:

1 Curso de extensão em Administração de redes com GNU/Linux Italo Valcy - italo@dcc.ufba.br Gestores da Rede Acadêmica de Computação Departamento de Ciência da Computação Universidade Federal da Bahia Italo ValcyAdministração de redes com GNU/Linux

2 Todo o material aqui disponível pode, posteriormente, ser utilizado sobre os termos da: Italo ValcyAdministração de redes com GNU/Linux Creative Commons License: Atribuição - Uso não comercial - Permanência da Licença http://creativecommons.org/licenses/by-nc-sa/3.0/

3 Italo ValcyAdministração de redes com GNU/Linux Assuntos abordados Programação em Shell Script Expressões Regulares Manipulação de stream

4 Programação em Shell Script (continuação)

5 Italo ValcyAdministração de redes com GNU/Linux Programação em Shell Script Já sabemos como escrever scripts (cabeçalhos, estrutura básica de um script) Utilização de variáveis Parâmetros Programação em Shell Script

6 Italo ValcyAdministração de redes com GNU/Linux O Mundo GNU/Linux Como executar operações matemáticas (1+1, por exemplo) em bash? Basta utilizar o bloco do tipo “$((...))” que retorna o resultado de uma operação aritmética. Soma: $((1+1)) ou X=$((1+1)) Resto: $((7 % 4)) Exponenciação: $((4**2)) Operações aritméticas

7 Italo ValcyAdministração de redes com GNU/Linux Comando IF: if then else fi Condição: resultado de uma comparação aritmética ou o resultado de um comando (baseado no código de retorno). Comandos: grupo de ações a serem executadas caso a condição seja verdadeira. Execução condicional Programação em Shell Script

8 Italo ValcyAdministração de redes com GNU/Linux Exemplos: if ls >/dev/null 2>&1; then echo “ok”; fi if ls /naoexiste 2>/dev/null then echo “ok” else echo “problema”; fi if ((5 > 3)) then echo “5 eh maior que 3” fi Execução condicional Programação em Shell Script

9 Italo ValcyAdministração de redes com GNU/Linux Quando usar: ((expressao)) [ expressao ] [[ expressao ]] Execução condicional Programação em Shell Script

10 Italo ValcyAdministração de redes com GNU/Linux Escreva um comando que dê boa tarde, bom dia ou boa noite de acordo à saída do comando date. Dica: date +FORMAT exibe a data usando FORMAT como padrão de saída. Mais informações man date. Tempo estimado para realização da atividade 5min. Execução condicional – Exercício 1 Programação em Shell Script

11 Italo ValcyAdministração de redes com GNU/Linux Comando for: for ((expr1; expr2; expr3)) do done Expr1: Executa no início do comando Expr2: Avaliada a cada iteração do comando Expr3: Executa no final de cada iteração for ((x=0; x <= 10; x++)); do echo $x done Controle de fluxo Programação em Shell Script

12 Italo ValcyAdministração de redes com GNU/Linux Existem outras formas para o comando for: Usando listas: for in do done variavel: iterador para cada elemento da lista lista: saída de comando ou variável com lista de elementos comando: comandos que serão executados. Controle de fluxo Programação em Shell Script

13 Italo ValcyAdministração de redes com GNU/Linux Comando while: executa os comandos enquanto a expressão for verdadeira: while ; do done Comando until: executa os comandos até a expressão se tornar verdadeira: until ; do done Controle de fluxo Programação em Shell Script

14 Italo ValcyAdministração de redes com GNU/Linux Comando while: x=1 while ((x < 10)); do echo $x x=$((x+1)) done Qual a função do comando acima? Qual a função dos duplos parenteses? Como reescrever o comando com until? Controle de fluxo Programação em Shell Script

15 Italo ValcyAdministração de redes com GNU/Linux Escreva um script que conte o número de palavras de um arquivo-texto. Utilize o comando for para isso. * Esta atividade permite que o aluno treine o controle de fluxo e operações com listas. Controle de fluxo – Exercício 2 Programação em Shell Script

16 Italo ValcyAdministração de redes com GNU/Linux Como saber se um script executou corretamente? Zero: terminou com sucesso. Não-zero: terminou sem sucesso. Em geral o código de retorno para “sem sucesso” é 1. $ cd / $ echo $? 0 $ cd /inexistente bash: cd: /inexistente: arquivo ou diretório não encontrado $ echo $? 1 Status de execução Programação em Shell Script

17 Italo ValcyAdministração de redes com GNU/Linux O comando read é utilizado para ler um valor da entrada padrão e armazená-lo em variavel. Escreva um script que solicite que o usuário digite uma string qualquer. O script deve continuar solicitando a entrada até que o usuário digite PARE. Dica: while true Programação shell script – Exercício 3 Programação em Shell Script

18 Italo ValcyAdministração de redes com GNU/Linux Crie um script para efetuar backup de arquivos e diretórios. O script deve receber como parâmetros um ou mais arquivos e diretórios que serão copiados para /tmp/, onde deverá ser no formato AnoMesDia- HoraMinuto. O script deverá emitir uma mensagem de erro caso a cópia não seja efetuada com sucesso. Programação shell script – Exercício 4 Programação em Shell Script

19 Italo ValcyAdministração de redes com GNU/Linux Home work: Faça scripts para resolver os problemas propostos no SVN do curso [1]. A solução deve estar disponível no SVN até 31/03/2009. Dúvidas podem ser tiradas pela lista de dicussão. Postem o trabalho no SVN do curso [1], dentro de um diretório no seguinte padrão: seu-nome/exercicios-shell 1 - https://intranet.dcc.ufba.br/svn/curso-graco/2009.1/exercicios-shell.txt Programação shell script – Exercício 5 Programação em Shell Script

20 Dúvidas? Programação em Shell Script

21 Expressões regulares

22 Italo ValcyAdministração de redes com GNU/Linux Expressões regulares Poupam tempo na busca por informações ou em tarefas complexas. Uma expressão regular (Regex), é uma construção que utiliza pequenas ferramentas, feita para obter uma determinada sequência de caracteres de um texto. Vários programas e linguagens de programação tem suporte à Regex, dentre eles o grep, egrep, find, sed, awk, lex, perl, e também alguns editores como o vim e emacs. Por quê estudar expressões regulares?

23 Italo ValcyAdministração de redes com GNU/Linux Expressões regulares Curingas são utilizados para expressar conjuntos de arquivos na linha de comando: *.txt: todos os arquivos que terminam com “.txt” arquivo-??.txt: dois caracteres quaisquer após o hífen. arquivo.{txt,html}: terminação com txt ou html. Não confunda metacaracteres com curingas

24 Italo ValcyAdministração de redes com GNU/Linux Expressões regulares grep, egrep, fgrep – imprimem linhas que casão com um padrão. Grep [opcoes] PADRAO [arquivo] grep 'root' /etc/passwd Imprime as linhas do arquivo /etc/passwd que contêm a palavra root. grep -v 'root' /etc/passwd Imprime as linhas de /etc/passwd que não contêm a palavra “root”. grep -lr 'wireless' /usr/src/linux/doc/* Imprime os arquivos do diretório /usr/src/linux/doc e subdiretórios, que contém a palavra wireless. O comando grep

25 Italo ValcyAdministração de redes com GNU/Linux Expressões regulares Metacaracteres são caracteres com funções específicas, que informam padrões e posições impossíveis de serem especificadas com caracteres normais. Exemplos: todas as linhas iniciadas pelos caracteres “a”,”b”,”c” e “d”, e que terminam com “1” todas as linhas que possuam três números em seqüência todos as linhas que possuem um padrão de data (dd/mm/aaaa) Metacaracteres

26 Italo ValcyAdministração de redes com GNU/Linux Expressões regulares O circunflexo ^: Simboliza o início de uma linha. grep '^root' /etc/passwd O cifrão $: representa o fim de uma linha: grep 'bash$' /etc/passwd Uma combinação útil seria: grep '^$' arquivo # busca por linhas em branco O metacaractere ^ e $

27 Italo ValcyAdministração de redes com GNU/Linux Expressões regulares Os [ ] permitem limitar um conjunto de caracteres a ocupar uma dada posição no texto. Exemplos: $ grep '^[aeiou]' /etc/group filtra todos os grupos com nome iniciado pelas vogais $ grep '^[bcdfghjklmnpqrstvxywz]' /etc/passwd filtra todas os usuários cujo o nome inicia por uma consoante $ grep '[0123456789][0123456789][0123456789]' /etc/group filtra todas as linhas que possuam três números em seqüência O metacaractere de lista [ ]

28 Italo ValcyAdministração de redes com GNU/Linux Expressões regulares Para lista seqüênciais como 0123456789, abcd...z é possível utilizar o meta caracter -, para simbolizar a seqüência. Exemplos: $ grep '^[a-z]' /etc/passwd filtra todas os usuários cujo o nome inicia por uma letra $ grep '[0-9][0-9][0-9]' /etc/group filtra todas as linhas que possuam três números em seqüência O metacaractere hífen (-)

29 Italo ValcyAdministração de redes com GNU/Linux Expressões regulares As { } serve para indicar a quantidade de repetições de um caracter ou metacaracter Exemplos: $ grep '^.\{41\}$' /etc/passwd filtra todas as linhas que possuem 41 caracteres. Observe que as barras reversas, “\”, são necessários para escapar as chaves no grep. É sugerido utilizar o egrep no lugar do grep. $ egrep '^.{41}$' /etc/passwd Mesmo comando acima, porém mais simples $ egrep '^.{20,40}$' /etc/passwd filtra as linhas com 20 a 40 caracteres O metacaractere chaves { }

30 Italo ValcyAdministração de redes com GNU/Linux Expressões regulares Mais exemplos: $ egrep '^.{20,}' /etc/passwd filtra as linhas com 20 ou mais caracteres. $ egrep '^.{,27}$' /etc/passwd filtra as linhas com menos de 27 caracteres $ egrep '^.{20,40}$' /etc/passwd filtra as linhas com 20 a 40 caracteres Algumas abreviações de repetição: ? == {0,1} - pode aparecer uma vez ou não * == {0,} - pode aparecer qualquer quantidade, inclusive nenhuma + == {1,} - aparecer uma vez ou mais O metacaractere chaves { }

31 Italo ValcyAdministração de redes com GNU/Linux Expressões regulares Metacaracter ou (|): As listas, [ ], trabalham apenas com caracteres, mas em outras ocasiões é necessário procurar por palavras alternativas. Para isto de usa o ou lógico |. Filtra apenas as linhas iniciadas com root, adm ou lp $ egrep '^(root|adm|lp):' /etc/passwd Metacaracter de negação de lista [^]: Para se negar uma lista, basta colocar o circunflexo a frente dos caracteres negados. filtra as linhas iniciadas com consoantes $ egrep '^[^aeiou]' /etc/passwd Outros metacaracteres

32 Dúvidas? Expressões regulares

33 Manipulação de stream

34 Italo ValcyAdministração de redes com GNU/Linux Manipulação de stream Utilizado para exibir na saída padrão colunas colunas ou campos de um ou mais arquivos. O arquivo original não é modificado. Sintaxe: cut opcoes [arquivo] Algumas opções utilizadas: -b lista-bytes: Mostra apenas os bytes nas posições listadas em lista-bytes. -f lista-campos: Mostra os campos presentes em lista- campos. -d delimitador: Define o delimitador de campos. Deve ser usada junto à -f. O comando cut

35 Italo ValcyAdministração de redes com GNU/Linux Manipulação de stream Queremos saber quais terminais virtuais estão em uso no sistema: $ who | cut -c10-15 tty7 pts/0 pts/1 pts/2 pts/3 Queremos quais usuários tem shell == /bin/bash no sistema: $ grep bash /etc/passwd | cut -f1 -d: root user1 O comando cut - Exemplos

36 Italo ValcyAdministração de redes com GNU/Linux Manipulação de stream A operação básica do awk é pesquisar em um conjunto de linhas de entrada aquelas que satisfazem a um padrão e executar determinada ação para aquela(s) linha(s). A sintaxe básica: awk [opcoes] 'padrao-acao' [arquivo...] O awk também trabalha com campos. Geralmente utilizamos esses campos nas cláusulas do padrão. Exemplo: awk '$1 == “Paula” {print $2, $3}' Tanto a ação quanto o padrão podem ser omitidos, sendo que: '$1 == “nome”', imprime as linhas que casam com padrão '{print $2, $3}', imprime o segundo e terceiro campo de todas as linhas. O comando awk

37 Italo ValcyAdministração de redes com GNU/Linux Manipulação de stream Opções úteis: -F value: configura o separador dos campos -v var=value: seta variável var para ser usada com valor value. Operadores relacionais usados em padrão ==, >, >=, <, <= Operadores lógicos &&, ||, ! O comando awk

38 Italo ValcyAdministração de redes com GNU/Linux Manipulação de stream Utilizado para fazer edição de arquivos. Sua sintaxe geral: sed regex [arquivo] Onde, regex segue em partes as regras já vistas, mas obedecem o seguinte formato geral: [ [, ]] Nesse caso, addr1 e addr2 definem a abrangência do comando no arquivo. Se ambos forem omitidos, todas as linhas serão processadas. Se somente um for especificado, sobre a linha referida. O comando sed

39 Italo ValcyAdministração de redes com GNU/Linux Manipulação de stream Referenciando a linha pelo seu número: $ sed '4...' arquivo $ sed '4,9...' arquivo Procurando por uma cadeia no texto. Deve-se colocar tal cadeia entre barras. $ sed '/cadeia/...' arquivo $ sed '/cadeia1/,/cadeia2/...' arquivo O comando sed - Endereçamento

40 Italo ValcyAdministração de redes com GNU/Linux Manipulação de stream Função para substituição de cadeias (s). $ sed 's/{valor velho}/{novo valor}/' Exemplo: $ echo 'Frase qualquer' | sed 's/qualquer/especial/' Frase especial Podemos fazer múltiplas modificações usando a opção -e ou com “;”: $ echo 'Frase qualquer' | sed -e 's/qualquer/especial/' -e \ 's/Frase/Palavra/' Palavra qualquer $ echo 'Frase qualquer' | sed -e 's/qualquer/especial; \ s/qualquer/especial/' Palavra qualquer O comando sed – Substituição

41 Italo ValcyAdministração de redes com GNU/Linux Manipulação de stream Para realizar múltiplas substituições devemos adicionar um “g” ao fim do comando. Exemplo: $ cat arquivo abcUNIXdefgUNIX hijlmUNIXnoUNIXpqrUNIX $ sed 's/UNIX/LINUX/' arquivo abcLINUXdefgUNIX hijlmLINUXnoUNIXpqrUNIX $ sed 's/UNIX/LINUX/g' arquivo abcLINUXdefgLINUX hijlmLINUXnoLINUXpqrLINUX O comando sed – Substituições globais

42 Italo ValcyAdministração de redes com GNU/Linux Manipulação de stream Outra função bastante usada é a remoção de linhas. Vejam que remoção de palavras pode ser feito pelo comando se substituição. A sintaxe do comando é: '{string de busca} d' Para remover as linhas que contenham two sed '/two/ d' numbers Para remover as três primeiras linhas: sed '1,3 d' numbers O comando sed – Deletando linhas $ cat numers one two one three two one

43 Italo ValcyAdministração de redes com GNU/Linux Manipulação de stream Adicionar texto a uma posição específica; Inserir texto em um trecho específico; Ler e escrever ao mesmo tempo; Alterar linhas; Inverter lógica dos comandos; etc. O comando sed – Outras funções

44 Dúvidas? Manipulação de stream

45 Italo ValcyAdministração de redes com GNU/Linux Referências http://aurelio.net/shell/canivete.html http://aurelio.net/curso/material/apostila-expressoes-intro.pdf http://rra.etc.br/linux/apresentacoes/Incrementando_o_Shell_com_ER.pdf http://www.oracle.com/technology/pub/articles/dulaney_sed.html


Carregar ppt "Curso de extensão em Administração de redes com GNU/Linux Italo Valcy - Gestores da Rede Acadêmica de Computação Departamento de Ciência."

Apresentações semelhantes


Anúncios Google