Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

05.02.2009, 10:11

[gelöst] Überprüfung eines Strings auf Zahlen und Großbuschtaben (CaseTests)

Moin moin,

irgend jemand in meinem Umfelt meinte, dass es wohl ganz guenstig waere, wenn ich noch das eine oder andere Briket nachlegen wuerde, was das scripten angeht.

Naja, hat er ja auch irgendwie recht.

Aber das nur so als kleine Vorgeschichte...

Ich habe ein script geschrieben, welches einen User in einer Datenbank anlegt und diverse andere Felder befuellt. Da der user nur in der Datenbank exsistiert und nicht auf dem eigentlichen System - der User darf sich nur ueber ein Web-Interface anmelden - kann ich nicht passwd verwenden, um ein komplexes Passwort generieren zu lassen. Das genau fuehrt mich zu meinem Problem, denn ich soll ueberpruefen, ob das Passwort, welches ja nur als Hash in die db geschrieben wird, gewissen Anforderungen entspricht.

Die erste Anforderung ist ziemlich einfach:

Laenge >= 6 Zeichen

Quellcode

1
2
3
4
5
...
 $PW=`echo $PASSWORT | wc -m`
if [ "$PW" -lt "6" ] ; then echo "Das eingegebene Passwort ist zu kurz
else echo "Ok, mach weiter"
fi

Alllerdings scheitere ich echt an den naechsten 3 Voraussetzungen:

mind. 1 Groszbuchstabe
mind. 1 Zahl
mind. 1 Sonderzeichen

Mit welchem Befehl kann ich den Wert einer vorherdefinierten Variable ( $PASSWORT ) auf das vorhandensein der oben beschriebenen Voraussetzungen ueberpruefen?
ich hab schon mit sed,tr,wc,test probiert und gebasteltet, aber bisher ohne Erfolg.

Ueber einen Tipp oder vielmehr Schups in die richtige Richtung waere ich sehr dankbar.

Bjoern.


Nachtrag:

Auf dem System laeuft:

- Debian Etch
- bash 3.1.7
- sed 4.1.5

Es sollte auch wirklich eine bash-Idee sein, da ich aus terminlichen Gruenden das restliche Script nicht mehr auf Perl oder etwas anderes umstricken kann.
for Windows problems: reboot
for Linux problems: be root

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BorneBjoern« (05.02.2009, 11:06)


Urmel

Anfänger

  • »Urmel« ist männlich

Beiträge: 35

Wohnort: Iserlohn/Deutschland

  • Nachricht senden

2

05.02.2009, 13:14

also ich bin selber noch anfänger auf dem gebiet aber ich würde es mit grep machen ...

3

05.02.2009, 14:33

RE: Ueberpruefung eines Strings auf Zahlen und Groszbuschtaben (CaseTests)

Ich klugscheiße mal ein bischen :)

Zitat

Original von BorneBjoern

Quellcode

1
$PW=`echo $PASSWORT | wc -m`

Dollar am Anfang ist böse.
Das fasst außerdem Leerzeichen zusammen und macht ein newline dazu, wegen fehlenden Quotes und fehlendem -n:

Quellcode

1
2
3
4
5
6
$ echo foo  bar  test|wc -m
13
$ echo "foo  bar  test"|wc -m
15
$ echo -n "foo  bar  test"|wc -m
14


Zitat

Original von BorneBjoern
mind. 1 Groszbuchstabe
mind. 1 Zahl
mind. 1 Sonderzeichen

Mit welchem Befehl kann ich den Wert einer vorherdefinierten Variable ( $PASSWORT ) auf das vorhandensein der oben beschriebenen Voraussetzungen ueberpruefen?

Da würde ich jetzt (e)grep nehmen, da gibt es dann u.a. die "character class"es "upper", "digit", und "alnum" (siehe "man 7 regex"). Die kannst Du dann beispielsweise so benutzen:

Quellcode

1
2
3
echo -n "$foo"|egrep '[[:upper:]]';
echo -n "$foo"|egrep '[[:digit:]]';
echo -n "$foo"|egrep '[^[:alnum:]]'; # Wenn "Sonderzeichen"!=Alphanumerisch

Umleiten nach /dev/null nicht vergessen, da (e)grep ja sonst das gültige Passwort ausgibt... :)

PS: Du mustt mit Anführungszeichen usw. sowiso super vorsichtig sein, damit man aus dem Web keine Code-Injection machen kann!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »oziris« (05.02.2009, 14:37)


4

05.02.2009, 17:12

RE: Ueberpruefung eines Strings auf Zahlen und Groszbuschtaben (CaseTests)

Danke Oziris!

:chinese:

das klappt.

Zitat

Umleiten nach /dev/null nicht vergessen, da (e)grep ja sonst das gültige Passwort ausgibt...


ich denke dieser schritt ist unoetig, da ich ueber "if" in dem script teste, ob der rueckgabewert ein leerer string ist.

also so stelle ich mir das vor:

Quellcode

1
2
3
4
if [ -z `echo $PASSWORT | egrep '[[:digit::]]'` ];
then echo "Fehler! Du hast keine Zahlen verwendet, mein Freund"
else echo "Naja, geht doch! Warum nicht gleich so"
fi


oder so aehnlich von der Wortwahl her.
for Windows problems: reboot
for Linux problems: be root

5

05.02.2009, 19:48

Interessant, so habe ich das noch nie gemacht. Ich habe immer den Exit-Status benutzt... Ich werde Deine Methode demnächst auch mal probieren. Vielleicht setzt sie sich ja durch.

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

6

06.06.2009, 09:36

der thread ist zwar schon etwas älter, aber ich möchte einen warnhinweis zufügen!
echo ist mit vorsicht zu geniessen, besonders ohne quoting zb durch double quotes wie es bb verwendet.
ein beispiel:

Quellcode

1
2
3
anz="der             test"
echo $anz
echo "$anz"

die leerzeichen sind verschwunden, denn nach der parametersubstitution bei echo $anz wirden echo durch die shell zwei parameter der und test übergeben und bei mehreren parametern hintereinander trennt echo die ausgabe automatisch durch ein leerzeichen.
bei echo "$anz" wird echo ein parameter übergeben und korrekt ausgegeben. zeilenumbrüche kann man mit -n unterdrücken.
ausserdem können bei echo in den ausgabestring optionen eingeschleust werden, wie ich es in echo-Problem bereits beschrieben habe. das ist offensichtlich ein bug und printf ist an sensiblen stellen sinnvoller.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Thema bewerten