Categories
Shell script

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/