PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Perl] logische Verknüpfungen



pertze
02-05-2006, 21:09
Hallo nochmal,

ich habe ein Skript, dass verschiedene Parameter mit Schaltern akzeptiert.
Zum Beispiel:

./delItem -u pertze # oder
./delItem -g users # oder
./delItem -m machine1$
Man kann also entweder einen User, eine Gruppe oder einen Maschinenaccount löschen. Beim Aufruf soll aber immer nur ein Parameter gesetzt sein. Nun habe ich in der ersten if-Bedingung alle Kombinationen aus den 3 Parametern abgefangen, so dass sich das Skript beendet sobald mehr als ein Paramter gesetzt ist. Meine Frage ist nun, ob man das auch besser, eleganter lösen kann. Denn bei mehr als 3 Parametern wird die if-Bedingung ja ziemlich umfangreich ;)


#!/usr/bin/perl -w

use Getopt::Std;

%OPTION = ();
getopts("u:g:m:", \%OPTION);

if(($OPTION{u} && $OPTION{g} && $OPTION{m}) || ($OPTION{u} && $OPTION{g}) || ($OPTION{g} && $OPTION{m}) || ($OPTION{u} && $OPTION{m})) {
exit(1);
}

if($OPTION{u}){
system("userdel $OPTION{u}");
}

if($OPTION{g}){
system("groupdel $OPTION{g}");
}

if($OPTION{m}){
system("userdel $OPTION{u}");
}

Danke schonmal und Gruß,
pertze

michael.sprick
02-05-2006, 23:02
Du könntest zum Beispiel einfach die Anzahl der Keys in %OPTION abfragen - oder auch die Anzahl der Elemente in @ARGV benutzen...



#wenn mehr als 1 Parameter angegeben wurde:
if(keys(%OPTION) > 1)
{
print STDERR "zuviele Parameter...\n";
exit(1);
}

pertze
03-05-2006, 05:36
Oh danke, manchmal seh ich den Wald vor lauter Bäumen nicht...