Unix-Validierungstools - Beschreibung SysVTools.pm
JT::CLI::SysVTools - Objektorientiertes Modul zum Aufbau von Command Line Interfaces analog zu den entsprechenden Unix-Eingabevalidierungstools.
use JT::CLI::SysVTools; my $ck = JT::CLI::SysVTools->new($progType, $poPath, \%options); die unless defined $ck && ref $ck; my $rc = $ck->run($toolType, \@args);
Diese Dokumentation beschreibt JT::CLI::SysVTools in der Version 0.33.
Dieses Modul wurde als objektorientiertes Interface zum Abbilden der Unix-Validierungstools wie ckitem oder ckyorn implementiert. Es wird im sysvtools.pl-Programm genutzt, die Methoden können aber aus jedem Perl-Programm heraus genutzt werden.
Das Modul bietet einen einfachen Mechanismus zum Anzeigen einer Eingabeaufforderung und zum Abfragen und Validieren der Eingabe für unterschiedlichste Eingabe-Typen. Es definiert Fehler- und Hilfemeldungen und bietet einen Satz von Optionen zur Formatierung der Anzeige und zum Validieren der Eingabe.
Es werden keine Terminal-spezifischen Eigenschaften benutzt. Das Modul sollte also auch bei Verbindungen via Telnet oder SSH problemlos arbeiten. Zur Steuerung der Anzeige werden ausschließlich Tasten auf der normalen alphanumerischen Tastatur benutzt, die einzige "nicht alphanumerische" Taste ist CTRL-d (Stoppen der Anzeige in ckitem).
- new($progType, $poPath, \%opts)
- Erzeugt ein neues Objekt. Der progType-Parameter definiert den Typ des zu erzeugenden Eingabevalidierungstools. Die folgenden Typen werden unterstützt:
- ckcont
- Dies ist eine Erweiterung der unter Unix verfügbaren Tools. Es zeigt einfach eine Meldung an und wartet auf ein RETURN. Ich habe das vermisst, weil ich diese Art von "Drücken Sie <RETURN> um fortzufahren" immer dann benutze, wenn ich dem Anwender die Möglichkeit geben will, die Ausgabe oder Fehlermeldung eines Programms in Ruhe zu lesen, bevor er wieder in das Hauptmenü zurückkehrt.
- ckdate
- Die Eingabe muss ein Datum im definierten oder Default-Format sein.
- ckgid
- Die Eingabe muss ein existierender Gruppenname sein.
- ckint
- Die Eingabe muss ein Integer sein, optional passend zu einer vorgegebenen Basis (Default: 10). Die Ausgabe erfolgt immer zur Basis 10.
- ckitem
- Dieses Tool zeigt ein Menü an und prüft die Eingabe. Standardmäßig wird die Liste der Menüpunkte so formatiert, dass sie sortiert und mit einer Nummer versehen ist. Die Liste wird in Blöcken von 10 Punkten je Seite angezeigt. Das Standardverhalten kann durch Optionen übersteuert werden.
-
Wenn die Liste mehr als 10 Punkte umfasst, dann kann der Anwender per RETURN seitenweise vorwärts blättern. Mit CTRL-d wird die Anzeige gestoppt und die Eingabeaufforderung wird angezeigt. Die Eingabe von ?? bewirkt eine erneute Anzeige der Menüpunkte vom Beginn an.
- ckkeywd
- Die Eingabe muss eines der vorgegebenen Schlüsselwörter sein.
- ckpath
- Die Eingabe muss ein Pfadname sein, der den in den Optionen festgelegten Kriterien entspricht. Wenn keine Option definiert ist, dann muss die Eingabe eine reguläre Datei sein, die noch nicht existiert.
- ckrange
- Die Eingabe muss ein Integer sein, optional passend zu einer vorgegebenen Basis (Default: 10). Die Ausgabe erfolgt immer zur Basis 10. Die Eingabe wird gegen die vorgegebenen Minimal- und Maximalwerte geprüft. Wenn nur ein Grenzwert vorgegeben ist, dann wird auch nur gegen diesen geprüft.
- ckstr
- Die Eingabe muss eine Zeichenkette sein, die zum definierten regulären Ausdruck passt und nicht länger als die definierte Maximallänge ist. Wenn kein regulärer Ausdruck definiert ist, darf die Zeichenkette maximal so lang wie die definierte Länge sein und darf keine führenden, inneren oder abschließenden Leerzeichen oder Tabulatoren enthalten. Wenn keine Maximallänge vorgegeben ist, dann wird diese auch nicht geprüft.
- cktime
- Die Eingabe muss eine Tageszeit im definierten oder Defaultformat sein.
- ckuid
- Die Eingabe muss ein existierender Benutzername sein.
- ckyorn
- Die Eingabe muss "ja" oder "nein" sein.
- run($toolType, \@args[, $silent)
-
Ablauf des Tools; liefert einen Returncode abhängig vom Validierungsergebnis zurück. Die folgenden Returncodes sind möglich:
- 0
-
Die Eingabe war korrekt. Der Wert der Eingabe wird auf
STDOUTausgegeben, wenn der silent-Parameter leer oder ungleich 1 ist. - 2
- Ungültiger Eingabewert für den val-Typ.
- 3
-
Abbruch durch Benutzer; die Eingabe wird auf
STDOUTausgegeben, wenn der silent-Parameter leer oder ungleich 1 ist. - ck
- Zeigt die Eingabeaufforderung an und erwartet eine Benutzereingabe. Die Eingabe wird entsprechend den definierten Optionen validiert. Wenn die Eingabe fehlerhaft ist, wird die Fehlermeldung und dann wieder die Eingabeaufforderung angezeigt. Der Benutzer kann '?' für die Anzeige der Hilfemeldung eingeben, danach wird wieder die Eingabeaufforderung angezeigt.
-
Für den Programmtyp item wird zuerst - wenn definiert - eine Überschrift und dann die Liste der Menüpunkte angezeigt. Wenn diese Liste mehr als 10 Einträge umfasst, kann der Benutzer mit
RETURNweiterblättern oder die Listenanzeige mitCTRL-dstoppen und zur Eingabeaufforderung wechseln. - val
- Validiert den übergebenen Eingabewert; es erfolgt keine Anzeige.
- err
- Zeigt die Fehlermeldung an.
- help
- Zeigt den Hilfetext an.
showMessage($msgType)
-
Zeigt die mit dem Parameter msgType angeforderte Meldung an. Die Typen
'error','help'und'prompt'werden in allen Tools unterstützt. Für den Programmtyp item sind 3 zusätzliche Meldungstypen verfügbar:'error_num', für eine ungültige Nummer eines Menüpunktes,'error_str'für die Eingabe eines nicht vorhandenen Menüpunktes und'error_uniq', wenn die Eingabe nicht eindeutig einem Menüpunkt zugeordnet werden konnte. showList()
- Diese Methode ist nur für den Programmtyp item zulässig. Zeigt die Menüliste an und steuert das Navigieren innerhalb der Liste.
value()
- Liefert die Benutzereingabe zurück, wenn sie erfolgreich validiert wurde oder wenn der Benutzer 'a' (Abbruch) eingegeben hat. In allen anderen Fällen wird ein leerer String zurückgegeben.
validateInput($input)
-
Validiert den im Parameter input angegebenen Wert gegen die definierten Validierungsoptionen. Abhängig vom Validierungsergebnis und Programmtyp wird einer der folgenden Returncodes zurückgegeben:
- 0
- Die Eingabe war korrekt. Der Wert der Eingabe ist über die Methode value() verfügbar.
- 1
- Validierungsfehler.
- 2
- Leere Eingabe, aber default verfügbar. Der konfigurierte Defaultwert ist über die Methode value() verfügbar.
- 3
- Leere Eingabe, kein default verfügbar.
- 4
- Abbruch durch Benutzer; Die Eingabe ist über die Methode value() verfügbar. Wenn die noQuit-Option auf 'wahr' (1) gesetzt ist, dann ist dieser Returncode nicht möglich. In diesem Fall wird ein Validierungsfehler zurückgeliefert.
- 5
- Hilfe wurde angefordert (der Benutzer hat '?' eingegeben).
- 6
- Das Menü soll neu angezeigt werden (Benutzereingabe war '??'); nur für ckitem.
- 7
- Eine numerische Eingabe passte auf keinen der vorhandenen Menüpunkte; nur für ckitem.
- 8
- Eine alphanumerische Eingabe passte auf keinen der vorhandenen Menüpunkte; nur für ckitem.
- 9
- Eine alphanumerische Eingabe identifizierte keinen Menüpunkt eindeutig; nur für ckitem.
Der poPath-Parameter ist der Pfad zu den .mo-Message-Katalogen. Ich habe noch keine Beschreibung
gefunden, wo diese Dateien liegen sollten, damit man den extra bindtextdomain-Aufruf umgehen kann. Wenn Ihr
dieses Modul mit dem make install-Target installiert habt, dann könnt Ihr den Parameter weglassen, der
Installationspfad wird dann per Default benutzt.
Der opts-Parameter ist eine Hash-Referenz mit den allgemeinen und Tool-spezifischen Optionen, die den Programmablauf sowie die Validierung der Eingaben bestimmen.
Die folgenden Optionen sind Tool-übergreifend gültig:
noQuit => 0 # Abbruch ist keine erlaubte Eingabe (0|1) width => 70 # Zeilenbreite für alle Meldungen (0..n) default => '' # der Default, wenn die Eingabe leer ist help => '' # Hilfemeldung error => '' # Fehlermeldung prompt => '' # Eingabeaufforderung killPID => -1 # die Prozess-ID, an die bei 'Abbruch' ein Signal geschickt wird sigPID => SIGTERM # das zu sendende Signal
Die Fehler- und Hilfemeldungen sowie die Eingabeaufforderung werden per Default aus den Message-Katalogen gelesen. Ihr könnt diese Meldungen mit den o. g. Optionen übersteuern. Wenn am Anfang oder am Ende des definierten Textes eine Tilde (~) steht, dann wird an dieser Stelle der Standardtext eingefügt.
Die folgenden Optionen sind Tool-spezifisch:
# ckcont
message => '' # Meldung, die vor dem Eingabeprompt angezeigt wird
# ckdate
dFormat => '%m/%d/%y' # das Datumformat, gegen das die Eingabe geprüft wird
# ckgid
listGroups => 0 # Zeige eine Gruppenliste bei Fehler oder Hilfe an (0|1)
# ckint
base => 10 # Basis der Eingabe (2..36)
# ckitem
invisible => [] # Liste der unsichtbaren Menüpunkte
label => '' # Menü-Überschrift
choices => 1 # max. Anzahl der auszuwählenden Menüpunkte (1..n)
noSort => 0 # Menüpunkte nicht sortieren (0|1)
onlyOne => 0 # nur ein Token zurückliefern (0|1)
noNumbers => 0 # keine Ziffern vor den Menüpunkten (0|1)
itemList => [] # die Liste der Menüpunkte
# ckkeywd
keyWords => [] # die Liste der erlaubten Schlüsselwörter
# ckpath
rel_abs => '' # 'relative' oder 'absolute'
fileType => '' # Dateityp ('b', 'c', 'f' or 'y')
fIsOld => 0 # Datei muss existieren (0|1)
fIsNew => 0 # Datei darf nicht existieren (0|1)
fCanCreate => 0 # Datei muss anzulegen sein (0|1)
fNoEmpty => 0 # Datei muss > 0 Bytes sein (0|1)
filePerms => '' # Berechtigungen ('rwx')
# ckrange
base => 10 # Basis der Eingabe (2..36)
lower => LONG_MIN # Eingabeminimum
upper => LONG_MAX # Eingabemaximum
# ckstr
sLength => 0 # Maximallänge der Eingabe
regex => [] # Liste der Patterns, gegen die die Eingabe geprüft wird
# cktime
tFormat => '%H:%M' # das Zeitformat, gegen das die Eingabe geprüft wird
# ckuid
listUsers => 0 # Zeige eine Benutzerliste bei Fehler oder Hilfe an (0|1)
Die Optionen sind detaillierter in sysvtools.pl beschrieben.
Der toolType-Parameter definiert den Typ des auszuführenden Tools. Folgende Typen sind möglich:
Der optionale Parameter silent definiert, ob der eingegebene Wert auf STDOUT angezeigt
wird.
Es gibt einige Unterschiede zum Verhalten der Originale, diese sind auf meiner TODO-Seite beschrieben. Wenn Ihr einen Fehler findet, dann schickt mir bitte eine detaillierte Fehlermeldung.



