Nessa sexta resolvi aprender um pouco de Shell script para automatizar algumas atividades do laboratório…

Achei que seria um pouco difícil e boring de aprender, mas por incrível que pareça, nenhum dos 2, completamente fácil e na verdade interessante. O shell script abre um mundo de novas possibilidades. É uma linguagem interpretada pelo bash (normalmente chamada de shell, o terminal do linux), e como as maiorias das linguagens de script/programação, possui as principais características básicas necessárias à programação: declaração de variáveis, funções, parametrização, e é claro, estruturas conficionais (if-else, case) e iterativas (for, while).

O script sh que eu fiz tem o objetivo de receber 2 vídeos como argumento, gerar a quantidade de cópias dele fornecida pelo nº de processos (também um argumento), e executar um programa C++ que recebe os vídeos como argumento e realiza um processamento dos mesmos medindo seu desempenho. O grande motivo de eu ter gerado esse sh, é pq eu quero facilitar e tornar mais rápido os testes de desempenho dos mesmos, podendo variar facilmente os vídeos, e a quantidade de processos paralelos.

Abaixo, o código na forma de imagem (mais compreensível).

Shell script
Código do Shell Script

Explicando os pontos principais:

  • #!/bin/bash
A primeira linha obrigatoriamente começa com um “#!” (que não é comentário por causa do “!”), informando qual interpretador ele deverá usar, juntamente com seu caminho. Existem outros interpretadores, porém esse é o mais utilizado. A lista de interpretadores instalados no sistema pode ser identi ficada através do comando “cat /etc/shells”.
  • NUMPROCESSOS=$1
Declaração de variável recebendo primeiro argumento do sh. Nome da variável deve ser “colada” ao = e seu respectivo valor. $0 == nome do script, $1 == primeiro argumento, $2 == segundo argumento, …, $# == nº de argumentos.
  • if [ -f “$VIDEOPRINCIPAL” ] && [ -f “$VIDEOSECUNDARIO” ] #verifica existencia dos arquivos de video
O “if” deve possuir um teste que vem entre colchetes []. O “-f” verifica existência de um arquivo. O $VIDEOPRINCIPAL me dá o valor da variável. E o # indica comentário.
  • echo ‘Arquivos encontrados’;
O “echo” imprime na console.
  • for NUM in $(seq 1 $NUMPROCESSOS) #recopio os vídeos N vezes
Realizo um “for” com uma sequencia de  1 até o valor de NUMPROCESSOS, fornecido pelo argumento.
  • cp $VIDEOPRINCIPAL ${VIDEOPRINCIPAL%%.ts}-${NUM}.ts
O “cp” é um comando do próprio linux, que me permite copiar o arquivo. Em ${VIDEOPRINCIPAL%%.ts}-${NUM}.ts através de um regex eu retiro o .ts da string, e adiciono o número da iteração ao fim (Ex.: video-3.ts).
  • dist/Debug/GNU-Linux-x86/./gtaaas \”${VIDEOPRINCIPAL%%.ts}-${NUM}.ts\” \”${VIDEOSECUNDARIO%%.ts}-${NUM}.ts\” \”4\” &
Está dentro do outro “for”, e serve para executar o programa C++ (com o &, já que vou executar vários paralelamente) com os vídeos recém-criados sendo passados como argumentos.

Tá aqui os 3 tutoriais que usei, bem simples, para iniciantes mesmo.

Anúncios