Primeiras aulas do curso Shell Scripting parte 1: scripts de automação de tarefas

Shell Scripting parte 1: scripts de automação de tarefas

Montando um script para converter imagens - Introdução

Olá pessoal! Meu nome é Rafael Nercessian, e darei uma introdução sobre o que veremos na primeira parte do curso de Shell Scripting.

Nesse curso nós, você e eu, fomos contratados pela Multillidae para ajudar na automação de algumas tarefas internas.

Os diretores da Multillidae têm uma plataforma de vendas na qual é preciso converter algumas imagens de extensão .jpg para .png. Na primeira parte do curso temos que encontrar uma forma de converter esses arquivos para .png e salvá-los em um respectivo diretório PNG.

Após essa etapa, os diretores da Multillidae resolveram fazer a divisão dessas imagens por área de conhecimento. Veremos como pegar várias imagens que estão espalhadas em vários lugares e convertê-las para seu respectivo formato .png.

Recebemos algumas informações dos diretores, que alguns processos do sistema estão com uma grande quantidade de memória alocada. Como os diretores querem saber quais são esses processos devemos salvá-los em arquivos separados, indicando a hora, a data e a locação em MB respectiva a cada processo, para que os diretores possam ter o histórico desses processos com a maior quantidade de memória alocada.

No final, devemos ter o diretório de log com vários processos salvos, onde cada um deles contém informações de data, hora e a respectiva alocação em megabytes.

Muito bem pessoal, esse foi um resumo da primeira parte do curso de Shell Scripting. Mais tarde, nos encontraremos na segunda parte deste curso, abordando outros assuntos da Multillidae.

Nesse curso, estaremos usando o Ubuntu e é muito importante que vocês tenham feito o curso de Linux, pois abordaremos alguns assuntos vistos nesse curso e também o curso de Lógica de Programação, para facilitar o acompanhamento deste curso.

Aguardo vocês e sejam todos muito bem-vindos!

Boas aulas!

Montando um script para converter imagens - Convertendo imagem e montando script

Nós fomos contratados pela Multillidae, para ajudá-los em algumas tarefas que eles terão nas semanas seguintes.

A Multillidae está com um projeto de abrir uma loja virtual e um dos setores dessa loja será o setor de livros de tecnologia. A Multillidae comprou alguns livros da Casa do Código para colocar na plataforma online de vendas.

Entretanto, a plataforma da Multillidae só aceita os arquivos no formato .png. Mas, os arquivos que foram passados da Casa do Código estão na extensão .jpg.

A missão que nos foi dada é justamente encontrar uma forma de converter esses arquivos de extensão .jpg para .png.

Os diretores da Multillidae nos passaram o link para o download das imagens.

Muito bem! Após ter feito o download das imagens, vamos abrir o terminal e verificar o diretório, para ver se de fato, o arquivo está lá na pasta "Downloads".

Como foi visto no curso de Linux, (se você ainda não fez o curso, clique aqui), para mudar de diretório basta utilizar o comando seguido da pasta cd Downloads/ e depois utilizar o comando ls que listará o conteúdo do diretório em que estamos.

Perceba que assim acessamos o arquivo com as imagens em .jpg, mas ele está compactado em zip. Vamos descompactá-lo utilizando o comando unzip imagens-livros.zip

Processo de descompactação no terminal

Vamos listar o diretório com o comando ls. O resultado será esse:

imagens-livros imagens-livros.zip

O primeiro diretório é a pasta que contém as imagens a serem convertidas e o segundo diretório é o arquivo compactado. Podemos removê-lo já que ele não é mais necessário. Utilizando o comando rm imagens-livros.zip conseguimos deixar somente o que nos interessa.

Legal, vamos entrar nesse diretório para ver o conteúdo dele:

$ cd imagens-livros/
$ ls

Conteúdo do arquivo descompactado, onde há vinte e oito imagens de livros da Editora Casa do Código no formato jpg

Temos aqui todos esse livros que precisamos realizar a conversão.

Depois que soubemos de nossa missão dentro da Multillidae, começamos a fazer algumas pesquisas. Vimos que no próprio Ubuntu existe uma ferramenta capaz de fazer essa conversão: o ImageMagick!!!

Para realizar essa conversão, basta utilizar o comando convert e dizer qual arquivo queremos converter. De início, daremos um foco maior no arquivo algoritmos.jpg, para ter a certeza de que realmente o ImageMagick irá realizar essa conversão. Feito isso, diremos o nome e a extensão do arquivo para o qual iremos converter:

$ convert algoritmos.jpg algoritmos.png

Na sequência, usamos o comando para listar, o ls. Vimos que o arquivo algoritmos.png se encontra nesse mesmo diretório. Mas, será verdade? Vamos confirmar se realmente esse arquivo tem a extensão .png.

Arquivo algoritmos.jpg foi convertido para algoritmos.png

Maravilha! Ao observar verificamos que o ImageMagick conseguiu converter esse arquivo! Ele parece ser a solução ideal para nós. Mas, repare que há cerca de 25 livros que precisam sofrer a conversão de extensão e utilizar o comando convert livro.jpg livro.png várias vezes para cada um dos livros não é uma solução muito elegante. Imagine que amanhã, os diretores tenham mais 100 imagens para converter, então, nesse caso, teríamos que colocar 100 vezes o mesmo comando para cada livro. Não seria nada prático, não é mesmo?

Justamente em situações como essas que o Shell Scripting consegue ajudar a automatizar essas tarefas.

SHELL SCRIPTING

Podemos interpretar o Shell como uma interface que nós, usuários, acessamos os recursos no Sistema Operacional. Já a palavra Scripting, significa roteiro e é uma lista de comandos que serão interpretados pelo Sistema Operacional.

Montaremos um script capaz de realizar essa conversão para nós, de uma forma mais eficiente do que o usuário simplesmente colocar o comando no terminal para cada imagem. Automatizaremos essa tarefa.

Para criar o arquivo, precisamos de um editor de texto. Fique a vontade para escolher o editor de seu gosto: Nano, Vi/Vim, gEdit ou algum outro de sua preferência. Ao longo do curso, usaremos o Nano e o gEdit.

Vamos voltar a nossa "home" com o comando cd para criar um diretório no qual vamos guardar todos os scripts feitos durante o curso.

$ cd
$ mkdir Scripts
$ cd Scripts/

Após ter mudado para dentro da nova pasta "Scripts", criaremos o primeiro Script para converter a imagem do formato .jpg para .png. Com o comando nano nome_de_um_arquivo.sh criaremos e editaremos esse arquivo utilizando o editor Nano. Como estamos trabalhando com Shell Scripting colocaremos a extensão .sh:

$ nano conversao-jpg-png.sh

Com o editor aberto, temos que dizer como esses comandos serão interpretados. Na primeira linha, vamos dizer qual vai ser o interpretador do script. Para isso, diremos por meio do comando:

#!/bin/bash

Após especificar o interpretador dos comandos que serão digitados a seguir, nos resta somente digitá-los para checar se o script funcionará. Para realizar a conversão, utilizamos o comando convert e converteremos o arquivo amazon_aws.jpg para o formato .png:

#!/bin/bash

covert amazon_aws.jpg amazon_aws.png

Repare que o arquivo amazon_aws.jpg está em um diretório diferente do nosso script. As imagens estão no diretório "imagens-livros", que está dentro de "Downloads". Os scripts, por sua vez, estão no diretório "Scripts". Por essa razão, é necessário colocar o caminho de onde esses arquivos estão, para que possamos ter a referência de onde eles estão localizados.

Tanto o diretório "Scripts" quanto o diretório "Downloads" estão dentro da home. Com isso, podemos usar o ~ pois eles estão dentro da home!

#!/bin/bash

convert ~/Downloads/imagens-livros/amazon_aws.jpg ~/Downloads/imagens-livros/amazon_aws.png

Queremos salvar a conversão amazon_aws.png no mesmo diretório dos arquivos .jpg, para que tudo fique no mesmo lugar.

Se tudo deu certo, vamos salvar o nosso script com o comando Ctrl + X para sair e Y de (yes) para salvar as alterações.

Como falamos que o interpretador do script é o bash, para rodar esse script, colocamos bash e o nome do script e depois teclamos o "Enter":

bash conversao-jpg-png.sh

Já que estamos no diretório "Scripts", vamos acessar o diretório "Downloads/imagens-livros":

$ bash conversao-jpg-png.sh
$ cd ~/Downloads/imagens-livros.
$ ls

Observe, agora temos o algoritmos.png e temos o amazon_aws.png, que é o resultado da conversão que nosso script fez. Mas perceba que o script só está fazendo a conversão do arquivo amazon_aws, ou seja, nós tiramos o comando do terminal e colocamos no script e isso fez com que voltassemos ao início do problema, precisando digitar uma linha de comando para cada imagem a ser convertida.

Vamos ver como melhorar esse script nas próximas aulas!

Montando um script para converter imagens - Passando parâmetros para o script

Na etapa anterior começamos a montar o script que era capaz somente de realizar a conversão do arquivo amazon_aws.jpg para o arquivo amazon_aws.png. Entretanto, ainda não conseguimos oferecer uma grande interação com o usuário final.

A ideia é, quando o usuário final executar o script, que ele seja capaz de passar parâmetros para serem interpretados.

Por exemplo, dentro da pasta "imagens-livros", temos o arquivo arduino_pratico.jpg, então o usuário poderia passar o nome desse arquivo como parâmetro para ser interpretado, assim o script se encarrega de fazer a conversão desse livro:

$ bash conversao-jpg-png.sh arduino_pratico

Perceba que dessa forma, o script converterá apenas a imagem de um único livro, pois o arquivo está estático e isso não é interessante para nós. Precisamos fazer com que o script pegue o conteúdo do primeiro parâmetro.

Para isso, acessaremos novamente o script com nano conversao-jpg-png.sh e implementaremos a tarefa de pegar o conteúdo do primeiro parâmetro passado pelo usuário. Para pegar o conteúdo, utilizamos o símbolo $.

E já que estamos falando do primeiro parâmetro, podemos referenciá-lo pelo número 1.

#!/bin/bash

convert ~/Downloads/imagens-livros/$1.jpg ~/Downloads/imagens-livros/$1.png

Após essas alterações, vamos fechar o arquivo com "Ctrl + x" e "y" para salvar. Vamos rodar esse script passando o nome do livro:

$ bash conversao-jpg-png.sh arduino_pratico

Aparentemente, foi feita a conversão. Vamos dar uma olhada na pasta.

Dentro da pasta "imagens-livros" encontramos o livro arduino_pratico.png! Ou seja, o script funcionou corretamente! Só que, temos vários arquivos dentro dessa pasta prontos para serem convertidos. Será que conseguimos passar mais de 1 parâmetro ao mesmo tempo? Vamos tentar!

Voltando ao script com o comando nano conversao-jpg-png.sh, queremos colocar o segundo parâmetro a ser interpretado. Pela lógica, assim como o parâmetro 1 é referenciado pelo primeiro, o segundo parâmetro será referenciado pelo número 2!

#!/bin/bash

convert ~/Downloads/imagens-livros/$1.jpg ~/Downloads/imagens-livros/$1.png
convert ~/Downloads/imagens-livros/$2.jpg ~/Downloads/imagens-livros/$2.png

Perceba que esse é um código repetitivo e estamos sujeitos a cometer erros mais facilmente. A partir do momento que o código apresenta sinais de repetição de um determinado comando, podemos isolá-los em uma constante e fazer a referência ao conteúdo da mesma.

#!/bin/bash

CAMINHO_IMAGENS=~/Downloads/imagens-livros

convert $CAMINHO_IMAGENS/$1.jpg $CAMINHO_IMAGENS/$1.png
convert $CAMINHO_IMAGENS/$2.jpg $CAMINHO_IMAGENS/$2.png

Legal! Vamos rodar esse script novamente para ver o resultado. Se tudo estiver certo, o usuário será capaz de passar 2 parâmetros simultaneamente.

$ bash conversao-jpg-png.sh asp_net big_data

Após a execução, veremos se o arquivo convertido realmente está lá.

$ cd ~/Downloads/imagens-livros/
$ ls

Dentro da pasta temos os livros asp_net e big_data convertidos para o formato png

Agora, o script consegue suportar 2 parâmetros que são passados simultaneamente pelo usuário!

Voltemos ao script:

$ cd ~/Scripts/
$ nano conversao-jpg-png.sh

Após observar atentamente o script, chegamos a conclusão que ele não está muito legal, pois temos duas linhas de comando que estão fazendo a mesma coisa! E como podemos melhorar o nosso script?

Veremos a seguir.

Sobre o curso Shell Scripting parte 1: scripts de automação de tarefas

O curso Shell Scripting parte 1: scripts de automação de tarefas possui 126 minutos de vídeos, em um total de 48 atividades. Gostou? Conheça nossos outros cursos de Linux em DevOps, ou leia nossos artigos de DevOps.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Linux acessando integralmente esse e outros cursos, comece hoje!

Plus

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$85
à vista R$1.020
Matricule-se

Pro

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas