Hallo,
ich habe ein Skript, mit dem automatisch Benutzer angelegt werden. Dieses prüft zunächst, ob die Namen (die über die Konsole eingegeben werden) keine unerwünschten Zeichen enthalten. Nun ist mir aufgefallen, dass Umlaute durchgelassen werden und ich finde keinen Weg, dies zu verhindern. Den für dieses Problem relevanten Teil des Sktiptes habe ich in diesem Beispiel zusammengefasst:
1 2 3 4 5 6 7 8 9 10 | #!/bin/bash read TEST if [ -n "`echo $TEST | egrep \"[^a-z0-9._\-]\"`" ]; then echo "ERROR!" else echo "OK" fi |
Die Ursache des Problems ist anscheinend, dass die Umlaute in diesem speziellen Fall generell verworfen werden. Wenn ich nämlich statt [^a-z0-9._\-] das "Gegenteil" also [a-z0-9._\-] verwende, dann werden Ziffern und kleine Buchstaben als Fehler erkannt und Sonderzeichen und Großbuchstaben durchgelassen (also wie zu erwarten genau das umgekehrte Verhalten als zuvor). Bei den Umlauten ändert sich das Verhalten aber nicht!
Möglicher Weise ist egrep nicht der richtige Lösungsansatz. Wie kann ich das Skript so verändern, dass wirklich alle Zeichen außer "abcdefghijklmnopqrstuvwxyz0123456789._-" als Fehler erkannt werden?
Ich bin für alle Anregungen dankbar. Lösungsvorschläge müssen aber berücksichtigen, dass die zu prüfenden Daten über die Konsole eingegeben werden sollen.
Gruß