User Tools

Site Tools


spln2016:dirio3

SPLN

Diário de Bordo - Aula 3 - 2016-02-29

Sumário

  • Enviroment $PATH
  • Script para criar nova pasta por aula
    • Atribuir permissões ao script
  • Expressões regulares
  • Operadores sobre vários tipos de dados
    • Arrays Associativos
    • Vetores
    • Apontadores (referências!)
  • Funções Anónimas
  • Perl Open()
  • Bash scripts
  • Perl scripts

Conteúdo

Enviroment $PATH

* para adicionar mais um caminho podemos:

  • executar comando $export PATH='~/bin':$PATH, para adicionar a pasta /bin que se encontra na home folder. Esta alteração funciona apenas na sessão activa.
  • para tornar esta alteração permanente linuxmint basta adicionar “export PATH='~/bin':$PATH" ao ficheiro: $sudo vim /etc/bash.bashrc

Script para criar uma nova pasta com data da aula.

#!/bin/bash
mkdir $(date +'%m-%d')
cd $(date +'%m-%d')
exec bash

Atribuir permissões ao script

$chmod 755 <filename> 
$chmod +x <filename>

Expressões Regulares

Para fazer match do caracter espaço, utiliza-se o seguinte :

\s é equivalente a  [ \t\n]
\S é equivalente a  [^ \t\n]

Utilização do Default input and pattern-searching space:

while( $_ =~ /\S/){...}
while( /\S/ ){...}

Esta expressão regular apanha todas as linha nao vazias. Para aceder a campos da expressão regular que fez match utilizamos a seguinte sintax:

/(\w+)\s+(.+)/

onde as expressões que estão dentro de parênteses curvos são acessiveis através de das variáveis $1..$9.

Operadores sobre vários tipos de dados

Consultar Capiulo 14. do Quick Reference Guide fornecido.

  • Arrays Associativos
%a - array associativo 
(keys %a) devolve as chaves do array
defined $a{$const}
$delete($a{v3})
  • Vetores
      @l - vetor
      unshift(@l, elem ) - insere elemento no inicio do vetor
      elem = shift(@l) - retira elemento do inicio do vetor
      push(@l, elem) - insere elemento no final do vetor 
      elem = pop(@l) - retira elemento do final do vetor
      $l[3] - accesso para o terceiro elemento da lista
      $l+0 = comprimento da lista
      @l = split(/a/,"batata") - retorna lista com elementos b,t,t
      join(',',1..10) - retorna string "1,2,3,4,5,6,7,8,9,10"
      join(',',@l) - retorna string "$l[0],$l[1],....$l[n]"
  • Referências
\@l - devolve referência para o vetor
\%a - devolve referêcia para array associativo
\&$f - referência para função
@x = (1,[3,4]) ,  $x[1][1] = 3
  • Funções Anonimas
$x = sub{ ... } - função anonima
  • Perl Open()
open(F,"<","/var/log/messages") - abre ficheiro /var/log/messages para leitura
  • Open de IPC (inter process communication: pipes)
#!/usr/bin/perl
	open(F, "-|", "ls") or die("Cant open file\n"); 
	while (<>) {
		print  "$. $_"; 
	}
	close (F);
open(F,">","/var/log/messages") - abre ficheiro /var/log/messages para escrita.
open(F,">>","/var/log/messages") - abre ficheiro /var/log/messages e acrescenta no final do ficheiro.
open(F,"-|","ls") - Estamos a criar um Pipe, O stdout do processo2 que é o comando 'ls', retorna-se para o processo1 que é o nosso script
#!/usr/bin/perl
      open(F, "-|", "ls") or die("Cant open file\n");
      while (<F>) {
          print  "$. $_";
      }
      close (F);

com open(F,”|-“,”ls“) - Estamos a criar um Pipe, O processo 1 pode escrever informação em pipe para o processo 2, usando Descripror 'F'

  • Bash script
for a in {1..20000}; do echo $RANDOM >$a.txt; done  -  cria 20000 ficheiros

* Perl scripts

  • imprime linhas repetidas, ignora linhas vazias
#!/usr/bin/perl
      
use warnings;
use strict;
use utf8::all;
      
my %hash; #array associado
while (<>) {
	if($_ =~ /\S/ and $hash{$_}){ # Se linha não é vazia e é repetida
		print $_;
	}
	else {
		$hash{$_}++;
	}
}
  • Detetar ficheiros duplicados numa diretoria fornecida como argumento.
#!/usr/bin/perl
      
use warnings;
use strict;
use utf8::all;
      
my %hash; #array associativo
my $arg =join ( " ",  map{-d $_?"$_/*":$_}@ARGV);
open(P, "-|", "md5sum $arg") or die("Cant open file\n");
while (<P>) {
	if(/(\w+)\s+(.+)/){ # $1 - md5sum; $2 - nome do ficheiro
		if($hash{$1}){
			print "$hash{$1} = $2\n";
		}
		$hash{$1} = $2;
	}
}
spln2016/dirio3.txt · Last modified: 2016/03/09 17:45 by ambs