[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Scripts...



	Bueno, de nada, pero ahora te cuento...

 On Mon, Oct 26, 1998 at 12:09:24AM -0300, Phillip Neumann wrote:
> Primero que nada gracias por la ayuda....
> La verdad es que no entiendo nada de perl, asique no se que hace el
> script que me diste:
> 
> #!/usr/bin/perl
> (1) while (<>) {
> (2)        chomp;
> (3)        if (/Hoy\, \d* me he conectado/) { $conectado=$1 }
> (4)        if (/Hoy\, \d* me he desconectado) { $desconectado=$1 ;
> 
> $x=$desconectado-$conectado if $
> desconectado > $conectado;
>                                            }
>             }
> 
> print "\n Tiempo total=$tiempo";
> 
> 
> (1) while (<>) significa que haga los pasos 2,3,4 hasta que pase que?

	El <> es equivalente a <STDIN> y la construcción es una
simplificación de 
	while ($@=<STDIN>)
	que quiere decir "mientras haya algo que leer de la entrada
estándar"

> (2) chomp: supongo que esto hace que lea algo...

	No, recorta la línea para que no tenga Ctrl-N al final. Sin
parámetros actua por la variable por defecto ($@ si no recuerdo mal)

> (3) if (/Hoy\, \d* me he conectado/) { $conectado=$1 }
> 
>         Esta parte me interesa...
>       si se cumple la condicion entre () se le asigna que valor a
> $conectado? (que es $1??)

	Si te fijas se trata de una expresión regular, por eso ciertos
caracteres (la coma, por ejemplo) va con una barra para quitarle el sentido
que tiene en estas. El \d* significa cualquier número decimal.

	De hecho me he equivocado, debería ser (\d*) para que luego
$1 tome el valor de la primera coincidencia de este valor, es decir, $1
valdrá lo que todos los números que haya dentro de la frase...

>       mi archivo /var/log/internet.log se ve asi:
> 
> Hoy, 21 de Oct a las 08:09:19 PM, --------= connecion
> Hoy, 21 de Oct a las 08:09:30 PM, --------= desconeccion
> 
>         Entoces como quedaria el script?? if (Hoy\, \d*  --------=
> connecion) {$conectado=$1} ???

	Umm... primero pon (\d*) en lugar de eso. Segundo, los - creo que
tienes que ponerlos con \-, aunque mira mejor la página de manula 'perlre'. 
Tercero, yo he supuesto que ponías la fecha en formato númerico (contando
los segundos desde el 1 de enero de 1970) que se obtiene al hacer
'date +%s'. Si pones la fecha de 'date' entonces tienes luego que utilizar
las funciones que te da PERL para fechas (man perlfunc) para convertirla a
números y así poder restar diréctamente, que es lo que hago yo en el script.

	Si te fijas lo que hago es muy simple, es sólo coger los pares
"conexión"/"desconexión" y acumular su diferencia en una variable que
será la que, al final, dirá cuanto tiempo has estado conectado.

> 
> 
> Estoy ancioso por acer funcional todo esto... todavia no puedo...
		   ^^^
		 hacer ¿no?
> 
> Gracias...
> 
> PS: ahh y lo mas importante.. como hago funcional el script ? perl
> scritp ??
> 

	Dos opciones, lo haces ejecutable y pones directamente 'nombre_de_script' (la
primera línea que deberá ser "#!/usr/bin/perl" indica el interprete), o
lo haces con 'perl nombre_de_script'

	Saludete y suerte

	Javi


Reply to: