/bin/sh if-Abfrage für alphanumerisch

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

/bin/sh if-Abfrage für alphanumerisch

Beitrag von nil » 07.03.2006 16:20:32

Hallo,
ich habe lange gesucht und vor allem nichts gefunden. Obowhl eigentlich müsste das Problem trivial sein.

Mein Programm funktioniert z.B. so:

Code: Alles auswählen

#!/bin/sh                                                                                                   

echo -n "Eingabe:"
read benutzer

if  [ "$benutzer" == "" ] 
then ...
fi
Nun wollte ich wohl eben 2 Dinge zusätzlich abfragen:

1.) sind alle Zeichen alphanumerisch [a-zA-Z0-9]
2.) ist die Länge der Eingabe kleiner als 10 Zeichen

Sollte doch nicht so schwer sein, oder? Wie sieht die if-Abfrage dazu aus?

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 07.03.2006 16:52:23

Schau mal unter man expr. Damit sollte das, was du machen willst moeglich sein.

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 07.03.2006 17:27:31

Hi,

wie lang ein String ist kannst du mit "wc" ermitteln. Mit dem Parameter -m (glaube ich) wird nur die Anzahl der Zeichen ermittelt. Ein ggf. im String vorkommendes Newline wird dabei glaube ich mit gezaehlt.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 07.03.2006 19:08:34

Code: Alles auswählen

markusgattol@pc1:~/misc/test$ cat file
#!/bin/sh
# script  checks if user input is:
# - only alphanumerical characters
# - string length is smaller or equal 10 characters

echo -n "Input please: "
read Input

string=`echo $Input | grep '^[[:space:]]*[[:alnum:]]*$'`

if [ -z $string ]; then
  echo "Input must be of the following characters [A-Za-z0-9] - at least one is necessary";
else
  declare -i string_length=`expr length $string`;

  echo $string_length

  if [ `echo $string_length` -gt 10 ]; then
  echo "Input length must not exceed a length of 10";
  else
  echo "Thank you - Input is ok ...";
  fi
fi
markusgattol@pc1:~/misc/test$
ACHTUNG: nicht getestet - sollte aber im Großen und Ganzen passen ...

markus

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 08.03.2006 08:52:12

Hi,
das war genau das, was ich gesucht habe. Nur noch eine Frage:
string=`echo $Input | grep '^[[:space:]]*[[:alnum:]]*$'`
macht mir irgendwie Probleme mit deutsche Umlaute, die ich nicht haben wollte. Auch [a-zA-Z0-9] gibt Umlaute aus, siehe

Code: Alles auswählen

cat test.txt 
baum
bäume
a$b

grep "^[a-zA-Z0-9]*$" test.txt                                                              
baum
bäume
daher habe ich die obige Zeile wie folgt gesetzt:

benutzer=`echo $eingabe | grep '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*$'`;

... es gibt nicht eine schönere Alternative mit einer Variablen?

Antworten