Se você não sabe Shell script, deveria saber

Ontem estava conversando com um amigo meu sobre shell script. Na verdade nós conversamos sobre esse assunto várias vezes nos últimos tempos. Sempre conto para ele como eu resolví um problema interessante com shell script e ele fica com água na boca e diz: “caramba, eu tenho que aprender esse troço”.

Shell script é pau pra toda obra. Para quem trabalha com Unix direto como eu, saber shell script pode fazer a diferença entre levar 30 minutos para resolver um problema ou levar 10 segundos para resolver o mesmo problema. Muitas vezes dá pra resolver com apenas uma linha de shell script. Pelo que eu me lembro nunca passei de umas 25 linhas. É sério.

É claro que o shell script não serve para todas as coisas. Por exemplo, ele não é feito para programar um site como este. Mas para as coisas que ele serve ele não decepciona. Vou dar exemplo de algumas coisas doidas que eu andei fazendo nas últimas semanas, todas com menos de 25 linhas de shell script:

1) Precisava visualisar simultaneamente os logs de 7 servidores de aplicação. Quando eu desse um refresh na tela (browser) precisava saber para dos servidores que o balanceador iria me jogar e visualizar o log deste servidor. E a cada refresh da tela o servidor pode mudar. Então, fiz um script para conectar simultaneamente em todas as máquinas e na mesma tela me mostrar as mensagens de log de todos os servidores, indicando no início da linha qual o servidor que havia mandado a mensagem. Tempo para fazer: 2 minutos. Linhas de script: 8 + arquivo de configuração com o endereço dos servidores.

2) Em determinadas horas o request para um mesmo Servlet feito pelo mesmo browser na mesma máquina e com os mesmos parâmetros estava gerando respostas completamente diferentes. Quem viu isso foi o técnico do suporte, que jurou de pé junto que era verdade. Olhando o código da aplicação deveria ser impossível que isso acontecesse mas como o cara jurou pela mãe dele, tinha que comprovar. Então resolví fazer um script para baixar 50.000 vezes o conteúdo deste Servlet. A cada vez que o conteúdo era baixado comparava com o anterior para ver se estava diferente. Em caso positivo ele parava a execução e me mostrava na tela a diferença entre os dois. Tempo para fazer: 10 minutos. Linhas de script: 21. (ah, todos os 50.000 arquivos baixados eram iguais um ao outro!)

3) Os DBAs aqui da empresa estavam limpando o banco de dados e selecionaram umas 30 tabelas candidatas a serem removidas do banco de dados por não estarem sendo utilizadas. Então eles me pediram para dar uma olhada nos nossos projetos e verificar se realmente elas não estavam sendo utilizadas em nenhum sistema. Fiz então um script para varrer o repositório de projetos e buscar por arquivos contendo uma ou mais das tabelas relacionadas. Tempo para fazer: 20 segundos. Linhas de script: 1 + arquivo de configuração com o nome das tabelas.

Provavelmente se eu não soubesse shell script estaria até agora escrevendo alguma coisa em Java ou qualquer outro treco para fazer tudo isso e não teria tempo de escrever no meu blog! Como eu quero ter tempo de escrever aqui preciso resolver meus problemas o mais rápido possível e por este motivo o shell script é essencial na minha vida! Hehe.

Agora é sério, já deu para ter uma idéia de como é interessante?

Para você poder começar neste minuto, selecionei alguns links legais para leitura:

- Conceitos básicos de Unix: http://sc.tamu.edu/help/general/unix/unix.html
- Wikipedia – Shell script: http://pt.wikipedia.org/wiki/Shell_script
- Prompt-doc: “Tira Dúvidas” sobre Shell: http://aurelio.net/curso/conectiva/conectiva-shell-prompt.html
- Shelldorado – Shell tips & tricks: http://www.shelldorado.com/shelltips/

Tags: , ,

4 Responses to “Se você não sabe Shell script, deveria saber”

  1. E eu sou testemunha viva do exemplo número 1.
    Realmente Shell Script é muito bom, na época que trabalhei na Biblioteca Nacional tive que fazer um conversor noturno de dados de uma versão de Isis para outra. Tive que usar apenas shell script, por imposição, mas não me arrependo.

  2. Charles says:

    Olá, Guilherme!
    Estou visitando pela primeira vez o seu blog e achei muito legal. Parabéns!

    Realmente shell script é uma mão na roda. Só como informação complementar, uma opção para programadores em Java que não querem aprender uma nova linguagem é o Groovy. Estou usando ele para escrever os meus scripts e tenho ficado satisfeito em poder juntar a simplicidade e rapidez dos scripts com o poder das milhões de bibliotecas disponíveis em Java para fazer tarefas rotineiras e até mais complexas.

    []’s

  3. JCCyC says:

    Assino embaixo!

    E digo mais: aprendam awk também, que junto com shell script fica mais matador ainda – http://en.wikipedia.org/wiki/AWK_(programming_language)

  4. Perfeito.

    Eu diria mais: conhecer shell é conhecer a linha de comando do unix, que foi desenhada de uma forma muito interessante. O conceito de pipes é muito poderoso. É possivel fazer muita coisa sem criar um script com aparencia de algoritmo (apesar do shell ter if e for).

    Uma das coisas que eu descobri foi que fechar o descritor da saída padrão ( comando >&- ) é muito mais eficiente do que redirecionar a saída pra /dev/null — fica pelo menos 20 vezes mais rápido.

    Um abraço

    Tiago – mais um leitor

Leave a Reply