curso de extensão em administração de redes com...
Post on 20-Jan-2019
221 Views
Preview:
TRANSCRIPT
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çãoDepartamento de Ciência da Computação
Universidade Federal da Bahia
Italo Valcy Administração de redes com GNU/Linux
Todo o material aqui disponível pode, posteriormente, ser utilizado sobre os termos da:
Italo Valcy Administraçã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/
Italo Valcy Administração de redes com GNU/Linux
Assuntos abordados
Programação em Shell Script
Expressões Regulares
Manipulação de stream
Italo Valcy Administraçã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
Italo Valcy Administraçã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
Italo Valcy Administração de redes com GNU/Linux
Comando IF:
if <condicao>
then <comandos>
else <comandos>
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
Italo Valcy Administraçã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
Italo Valcy Administração de redes com GNU/Linux
Quando usar:
((expressao))
[ expressao ]
[[ expressao ]]
Execução condicional
Expressão Símbolo ExemploO arquivo existe -eDiretório existe -dArquivo executável -x
-n [ -n $VARIAVEL ]-z [ -z $VARIAVEL ]
Igualdade de strings == [ $VAR1 == $VAR2 ]
[ -e /etc/passwd ][ -d /root ]
[ -x /bin/echo ]String não nulaString nula
É maior que (GreaterThan) -gt [ 5 -gt 4 ]
É menor igual (LessEqual) -le [ 4 -lt 5 ]
É maior igual (GreaterEqual) -ge [ 1 -ge 1]
É igual (EQual) -eq [ 3 -eq 4 ]É diferente (NotEqual) -ne [ 1 -ne 1 ]
Programação em Shell Script
Italo Valcy Administraçã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
Italo Valcy Administração de redes com GNU/Linux
Comando for:for ((expr1; expr2; expr3))do<comandos>done
Expr1: Executa no início do comandoExpr2: Avaliada a cada iteração do comandoExpr3: Executa no final de cada iteração
for ((x=0; x <= 10; x++)); doecho $x
done
Controle de fluxo
Programação em Shell Script
Italo Valcy Administração de redes com GNU/Linux
Existem outras formas para o comando for:Usando listas:
for <variavel> in <lista>
do
<comandos>
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
Italo Valcy Administração de redes com GNU/Linux
Comando while: executa os comandos enquanto a expressão for verdadeira:
while <expressao>; do
<comandos>
done
Comando until: executa os comandos até a expressão se tornar verdadeira:
until <expressao>; do
<comandos>
done
Controle de fluxo
Programação em Shell Script
Italo Valcy Administraçã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
Italo Valcy Administraçã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
Italo Valcy Administraçã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 /inexistentebash: cd: /inexistente: arquivo ou diretório não
encontrado$ echo $?1
Status de execução
Programação em Shell Script
Italo Valcy Administração de redes com GNU/Linux
O comando read <variavel> é 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
Italo Valcy Administraçã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/<datadehoje>, onde <datadehoje> 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
Italo Valcy Administraçã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
Italo Valcy Administraçã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?
Italo Valcy Administraçã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
Italo Valcy Administraçã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/passwdImprime as linhas do arquivo /etc/passwd que contêm a palavra root.
grep -v 'root' /etc/passwdImprime 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
Italo Valcy Administraçã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
Italo Valcy Administraçã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 $
Italo Valcy Administraçã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/groupfiltra todos os grupos com nome iniciado pelas vogais
$ grep '^[bcdfghjklmnpqrstvxywz]' /etc/passwdfiltra todas os usuários cujo o nome inicia por uma consoante
$ grep '[0123456789][0123456789][0123456789]' /etc/groupfiltra todas as linhas que possuam três números em seqüência
O metacaractere de lista [ ]
Italo Valcy Administraçã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 (-)
Italo Valcy Administraçã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/passwdMesmo comando acima, porém mais simples
$ egrep '^.{20,40}$' /etc/passwdfiltra as linhas com 20 a 40 caracteres
O metacaractere chaves { }
Italo Valcy Administraçã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/passwdfiltra as linhas com menos de 27 caracteres
$ egrep '^.{20,40}$' /etc/passwdfiltra as linhas com 20 a 40 caracteresAlgumas 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 { }
Italo Valcy Administraçã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
Italo Valcy Administraçã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
Italo Valcy Administração de redes com GNU/Linux
Manipulação de stream
Queremos saber quais terminais virtuais estão em uso no sistema:
$ who | cut -c10-15tty7 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:rootuser1
O comando cut - Exemplos
Italo Valcy Administraçã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
Italo Valcy Administraçã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
Italo Valcy Administraçã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:
[<addr1>[,<addr2>]] <funcao> <argumentos>
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
Italo Valcy Administraçã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
Italo Valcy Administraçã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
Italo Valcy Administraçã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 arquivoabcUNIXdefgUNIXhijlmUNIXnoUNIXpqrUNIX$ sed 's/UNIX/LINUX/' arquivoabcLINUXdefgUNIXhijlmLINUXnoUNIXpqrUNIX$ sed 's/UNIX/LINUX/g' arquivoabcLINUXdefgLINUXhijlmLINUXnoLINUXpqrLINUX
O comando sed – Substituições globais
Italo Valcy Administraçã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 numersonetwoonethreetwoone
Italo Valcy Administraçã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
Italo Valcy Administraçã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
top related