Página 1 de 1

Agrupar estadísticas de shell del fichero passwd

NotaPublicado: 2012-02-01 10:48 @492
por alesevimor
¡Hola de nuevo! mira estoy haciendo un script que agrupe las veces que el campo 7 del fichero passwd contiene bin/false, bin/sh y bin/bash. Esto es lo que tengo hecho. El problema es que nunca termina el bucle. Necesito que la salida sea:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
/bin/sh: 7
/bin/false: 19
/bin/bash: 2
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(F1, "passwd") or die "No existe el fichero";
  2. $contador=0;
  3. $contador1=0;
  4. $contador2=0;
  5. while ($linea=<F1>){
  6.         chomp $linea;
  7.         @line = split(/:/,$linea);
  8.         foreach $x(@line)
  9.         {
  10.         if ($x[7]=="sh")
  11.                 {
  12.                 $contador++;
  13.                 print "/bin/sh:",$contador;
  14.                 }
  15.         if ($x[7]=="bash")
  16.                 {
  17.                 $contador1++;
  18.                 print "/bin/bash:",$contador1;
  19.                 }
  20.         if ($x[7]=="false")
  21.                 {
  22.                 $contador2++;
  23.                 print "/bin/false:",$contador2;
  24.                 }
  25.         }
  26. }
  27. close F1;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


Gracias de antemano.;D

Re: Agrupar estadísticas de shell del fichero passwd

NotaPublicado: 2012-02-01 11:00 @500
por explorer
Cambia la línea 7 por
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         @x = split(/:/,$linea);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Elimina las líneas 8, 9 y 25 (las del bucle foreach(), ya que no te hacen falta).

Cambia todos los '==' de los if(), por 'eq', ya que se trata de una comparación alfanumérica, no numérica.

Debes sacar todos los print() que hay dentro de los if(), y ponerlos después del while(), cuando haya terminado el proceso de conteo.

Re: Agrupar estadísticas de shell del fichero passwd

NotaPublicado: 2012-02-01 11:17 @511
por alesevimor
Ya lo he hecho pero me da 0 la salida:
alejandroubuntu@alejandroubuntu:~/Escritorio$ perl agrupar.pl passwd
/bin/sh:0
/bin/bash:0
/bin/false:0

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(F1, "passwd") or die "No existe el fichero";
  2. $contador=0;
  3. $contador1=0;
  4. $contador2=0;
  5. while ($linea=<F1>){
  6.         chomp $linea;
  7.         @x = split(/:/,$linea);
  8.         if ($x[7] eq "sh")
  9.                 {
  10.                 $contador++;
  11.                 }
  12.         if ($x[7] eq "bash")
  13.                 {
  14.                 $contador1++;
  15.  
  16.                 }
  17.         if ($x[7] eq "false")
  18.                 {
  19.                 $contador2++;
  20.                 }
  21. }
  22. print "/bin/sh:$contador\n";
  23. print "/bin/bash:$contador1\n";
  24. print "/bin/false:$contador2\n";
  25. close F1;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Agrupar estadísticas de shell del fichero passwd

NotaPublicado: 2012-02-01 12:31 @563
por explorer
Eso significa que el campo 7 no es ni "sh", ni "bash", ni "false".

Si lo que buscas es "/bin/bash", deberás poner exactamente eso.

Re: Agrupar estadísticas de shell del fichero passwd

NotaPublicado: 2012-02-01 12:43 @571
por alesevimor
¡Muchas gracias! =)