Schrift
[thread]9134[/thread]

Problem mit Hashes/Values



<< >> 5 Einträge, 1 Seite
Pandurx
 2007-06-28 17:49
#77975 #77975
User since
2007-06-25
6 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,
ich komme mit meinem Programm nicht weiter.
Ich habe immernoch meine Datei im Format
Quote
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh

Ich will zu jedem benutzen , die daten nach dem 2. : ausgeben.
Doch ich weiss nicht wie ich den hash fülle und die "values" hinzufüge.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
foreach $zeile (<Datei>)
{
my @zeile = split(/:/,$zeile); # Aufsplitten der Zeile
$zeile = join(':',(@zeile)[2,3,4,5,6]); # Array ohne User und Passwort
$namenliste{$zeile[0]} = $zeile; # hash füllen: key = user-name,
# value = UID, GID, Komment, home, shell


}
print "\n", "Datei Passwd erfolgreich eingelesen.\n";

close (Datei);



print "\n Dies sind die Namen der User. Welche User soll ausfuehrlich angezeigt werden? \n ";
foreach $key (keys(%namenliste))
{
print " $key \n";
}

print "Fuer welchen Benutzer sollen die Daten angezeigt werden? ";
$name = <STDIN>;
chomp ($name);
if (exists $namenliste{$name}) # Ausgabe der Daten für einen Benutzer
{
print "\nDaten des Benutzers $name aus passwd :";
print "\nUser-ID: $zeile[2]";
print "\nGroup-ID: $zeile[3]";
print "\nKommentar: $zeile[4]";
print "\nHome-Verz: $zeile[5]";
print "\nShell: $zeile[6]";
}
else
{ print "\nBenutzer falsch eingegeben"; }


Könnt ihr mir vielleicht helfen?

Danke und Gruß
Stefan aka Pandur
Linuxer
 2007-06-28 17:59
#77976 #77976
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

z.B. so:


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/perl
# vim: set ts=4 sw=4 et sta:
use strict;
use warnings;

my %hash = ();

open my $etc_passwd, "/etc/passwd" or die "open /etc/passwd: $!\n";


while ( my $line = <$etc_passwd> ) {
chomp $line;

my ( $user, @rest ) = split(/:/, $line );

# Hash of Array (HoA)
$hash{$user} = \@rest;

}

close $etc_passwd or die "close /etc/passwd: $!\n";


for my $user ( keys %hash ) {

# HoA dereferenzieren
my @data = @{ $hash{$user} };
# zugriff auf den Daten-Array des Users $user
print "$user : @data", $/;
}



perldoc perlref
perldoc perldsc

edit: Einrückung korrigiert :/edit\n\n

<!--EDIT|Linuxer|1183049942-->
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
bloonix
 2007-06-28 18:58
#77977 #77977
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Vielleicht magst du ja sowas....

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use strict;
use warnings;
use Data::Dumper;

my %userlist = ();

while (my $line = <DATA>) {
  chomp($line);
  my %row = ();
  @row{qw/user locked uid gid comment home shell/} = split /:/, $line;
  $userlist{$row{user}} = \%row;
}

while ( 1 ) {
  print "\nWelcher Benutzer soll angezeigt werden?  ";
  chomp(my $user = <STDIN>);
  if ($userlist{$user}) {
     print "\nDaten des Benutzers $user aus passwd :";
     print "\nUser-ID:   $userlist{$user}{uid}";
     print "\nGroup-ID:  $userlist{$user}{gid}";
     print "\nKommentar: $userlist{$user}{comment}";
     print "\nHome-Verz: $userlist{$user}{home}";
     print "\nShell:     $userlist{$user}{shell}\n";
  } else {
     print "Diesen Benutzer gibt es nicht!\n";
  }
}

__END__
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh


# ./foo.pl

Welcher Benutzer soll angezeigt werden?  foobar
Diesen Benutzer gibt es nicht!

Welcher Benutzer soll angezeigt werden?  root

Daten des Benutzers root aus passwd :
User-ID:   0
Group-ID:  0
Kommentar: root
Home-Verz: /root
Shell:     /bin/bash

Welcher Benutzer soll angezeigt werden?
...
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2007-06-28 19:18
#77978 #77978
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=Pandurx,28.06.2007, 15:49]
Code: (dl )
foreach $zeile (<Datei>)
[/quote]
das ist nicht gut!
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
Pandurx
 2007-06-29 15:52
#77979 #77979
User since
2007-06-25
6 Artikel
BenutzerIn
[default_avatar]
ich bedanke mich schonmal und schau mir das später wenn ich mehr zeit hab, genau an
<< >> 5 Einträge, 1 Seite



View all threads created 2007-06-28 17:49.