Automatizando tarefas shell ao máximo com Expect – FISL 12

No último sábado, apresentei uma palestra no FISL 12 falando sobre automação de tarefas shell, usando a ferramenta Expect.

Nesse post, eu já dei uma prévia do que foi apresentado, e aqui pretendo disponibilizar alguns scripts e os slides usados na palestra.

View more presentations from Leandro Nunes

Neste exemplo, mostrei um pequeno código feito em Linguagem C. O que queria deixar claro com esse exemplo é que um software qualquer, mesmo sem estar preparado, pode ter sua execução automatizada, com o Expect:

#include<stdio.h>

int main(void) {
  int numeroQueEuDigitei = 0;

  while (numeroQueEuDigitei % 2 == 0) {
    printf("Digite um  numero par: ");
    scanf("%d", &numeroQueEuDigitei);
  }

  printf("FUUUUUUUUUUUU!n");
}

Para compilar o programa acima, usar o GCC, de maneira bem simples:

gcc -o meuexecutavel meu_codigo_fonte.c

O script do expect que automatiza esse fonte, pode ser algo semelhante a isso:

#!/usr/bin/expect
#lanca o programa
spawn ./meuexecutavel
expect "%par:"
send "2r"
expect "%par:"
send "4r"
expect "%par:"
send "3r"
expect "%UUUUU!"

Assim que a TV Software Livre disponibilizar os vídeos, pretendo disponibilizar por aqui.


Palestra sobre Automação de tarefas Shell no FISL 12

Este ano irei participar como palestrante do FISL 12, falando sobre automação (ou automatização, é a mesma coisa) de tarefas shell, usando uma ferramenta muito prática e robusta, chamada Expect.

Nesse post eu pretendo colocar algum material adicional e links interessantes para complementar o que será apresentado na palestra.

O Expect usa linguagem TCL para simular a interação com programas de linhas de comando, através de scripts. Isso é uma funcionalidade extremamente útil para automação de tarefas de administração de redes, teste automatizado e integração de sistemas.

A instalação da ferramenta no Ubuntu ocorre da forma mais trivial possível, usando o apt-get.

leandro@jaspion:~$ sudo apt-get install expect

O expect tem um modo interativo, útil para testar seus scripts de maneira prática…

Os scripts TCL para utilização com o expect são bastante legíveis para quem tem algum conhecimento de programação e inglês. O uso de expressões regulares também é interessante para o desenvolvimento de scripts com interações mais complexas.

Existem algumas diretivas simples que sevem para tarefas comuns quando se está automatizando tarefas em shell. São elas: spawn, expect e send. Para ilustrar a maneira com que essas diretivas são usadas, observe a figura abaixo.

Um script que exemplifica o uso dessas diretivas é mostrado abaixo:

# lança a aplicacao que quero interagir
spawn ssh localhost

# aguarda a apresentação de uma mensagem qualquer, cujo final seja "password:"
expect "% password:"

#escreve "minha_senha" e pressiona <ENTER>
send "minha_senhar"

# espera que qualquer mensagem seja mostrada na tela
expect "%"

# escreve ls -lsa e pressiona <ENTER>
send "ls -lsar"
expect "%"
send "exitr"

# finaliza a execução
expect eof

É possível também tornar seus scripts executáveis, incluindo o seguinte conteúdo na primeira linha do arquivo (esse é o caminho do expect no Ubuntu, instalado através do apt-get):

#!/usr/bin/expect

Além das diretivas básicas, apresentadas neste post, é possível inserir lógica nos scripts, através de estruturas condicionais, criação de variáveis e procedimentos. Tudo isso vem junto com a sintaxe e as funcionalidades da linguagem TCL. É possível incluir, por exemplo, suporte a Banco de Dados e trabalhar com arquivos externos.

…e se você prefere não usar TCL ?

Existem alternativas ao uso de TCL integrado com o expect. Uma delas é o Pexpect, integrado com a linguagem Python.

Para quem curte PERL, existe o módulo Expexct.pm.

Links interessantes:


Palestra aprovada no FISL 12 – Automatizando com Expect

Pelo terceiro ano consecutivo, terei a oportunidade de apresentar uma palestra no Fórum Internacional do Software Livre – FISL 12.

Ano passado tive duas palestras aceitas, uma falando sobre Integração Contínua com Hudson e outra sobre o estado atual (da época) do OpenJDK 7.

Em 2009, na minha primeira participação como palestrante num evento desse porte, falei sobre desenvolvimento de games usando JMonkey Engine e Java.

Este ano vou fugir um pouco da temática de desenvolvimento de software, indo para a área de automação de tarefas, especificamente usando shell e a ferramenta Expect. Ainda não montei meus slides, mas já tenho uma boa noção de como será organizada a palestra e as práticas.

Abaixo a proposta de palestra que foi enviada, na íntegra:

Automatizando tarefas shell ao máximo com o Expect

Este é um tema recorrente para administradores de sistema, programadores, estudantes, enfim, todos os que precisaram, em alguma situação automatizar tarefas de linha de comando.

Expect é uma poderosa e robusta ferramenta de automação de tarefas através de uma sintaxe simplificada mas ao mesmo tempo muito flexível. Com o Expect é possível simular interação com um usuário através de scripts (baseados em TCL) que resolvem os mais diversos tipos de problema do ambiente de linha de comando.

O objetivo desta palestra é apresentar a ferramenta expect através de diversos casos de uso de seus recursos.

Será mostrado na prática como desenvolver desde um login simples através de SSH, simulando a interação com o usuário, até automatizações mais complexas como rotinas de backup e replicação de dados.

Para os participantes é necessário possuir conhecimento básico, nível usuário, de interface de linha de comando e ter noções de lógica de programação estruturada.

Links Interessantes:


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Join 108 other followers