ubuntuusers.de

Eingabe auf Zahlen und Buchstaben prüfen

Status: Gelöst | Ubuntu-Version: Ubuntu 10.10 (Maverick Meerkat)
Antworten |

Benny66766

Anmeldungsdatum:
20. April 2010

Beiträge: 33

Hallo liebe Nutzer,

Ich arbeite mit einer bourne-shell und habe ein skript, dass eine eingabe daraufhin prüfen soll, dass diese nur zahlen und/oder buchstaben enthalten darf. das scheinte nicht ganz zu funktionieren, daher habe ich den teil extrem vereinfacht:

1
2
3
if [ "asd" =~ "[a-z]" ]; then 
        echo "valid"
fi

aber es kommt immer noch der gleiche fehler: "unexpected operator" in der zeile wo "fi" ist. wo ist der fehler?

pinguino

Avatar von pinguino

Anmeldungsdatum:
6. Februar 2007

Beiträge: 732

Wohnort: BW

du mußt nur das so schreiben:

1
2
3
4
5
6
7
if [[ "$var" =~ ^[a-zA-Z0-9]*$ ]]

then

Kommand

fi

Benny66766

(Themenstarter)

Anmeldungsdatum:
20. April 2010

Beiträge: 33

ich hatte auch schon daran gedacht, erhalte aber diese meldung:

1
convert32.sh: 149: [[: not found

pinguino

Avatar von pinguino

Anmeldungsdatum:
6. Februar 2007

Beiträge: 732

Wohnort: BW

schreibe das so:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/bash

var=fedqwtfe55667$

if [[ "$var" =~ ^[a-zA-Z0-9]*$ ]]

then

echo "OK"

else

echo "NOK"

fi

Benny66766

(Themenstarter)

Anmeldungsdatum:
20. April 2010

Beiträge: 33

leider will die doppelklammer nicht so recht:

1
2
152: [[: not found
NOK

mit diesem code:

1
2
3
4
5
6
7
var=fedqwtfe55667$
if [[ "$var" =~ ^[a-zA-Z0-9]*$ ]]
then                                                                                                                                                                                                           
echo "OK"
else
echo "NOK"
fi

diesch Team-Icon

Avatar von diesch

Anmeldungsdatum:
18. Februar 2009

Beiträge: 5072

Wohnort: Brandenburg an der Havel

Die Bourne-Shell (sh) unterstützt (im Gegensatz zur Bourne-Again-Shell (Bash)) weder =~ noch [[...]].

Wenn deine Eingabe nur aus einem Zeichen besteht, kannst du case nehmen:

1
2
3
 case "$var" in
  [a-z]|[0-9] ) echo "valid";;
 esac

Wenn du wirklich einen Regulären Ausdruck brauchst, nimm grep

1
2
3
if echo "$var" | grep irgendwas; then
  echo "valid"
fi

pinguino

Avatar von pinguino

Anmeldungsdatum:
6. Februar 2007

Beiträge: 732

Wohnort: BW

riffraff

Avatar von riffraff

Anmeldungsdatum:
1. Oktober 2006

Beiträge: 486

Wohnort: Im kühlen Norden

Wenn es definitiv NUR Ziffern oder NUR Buchstaben sind, könnte man mit

1
2
3
4
5
6
if [[ $1 = *[[:digit:]]* ]]
  then
  echo "$1 ist eine Zahl"
  else
  echo "$1 ist keine Zahl"
fi

Wenn der Input gemischt ist (wie 123Hallo), könnte man in dieser Richtung etwas machen:

1
2
3
4
5
6
7
#!/bin/sh

[[ -z "$1" ]] && echo "Bitte etwas eingeben" && exit 1
INPUT="$@"
[[ "$INPUT" == ?(+|-)+([0-9]) ]] && echo "$INPUT ist Numerisch" && exit 0
[[ "$INPUT" == +([a-zA-Z]) ]] && echo "$INPUT sind Buchstaben" && exit 0
[[ "$INPUT" == *([0-9]|[a-zA-Z])* ]] && echo "$INPUT ist Alpha-Numerisch" && exit 0

Benny66766

(Themenstarter)

Anmeldungsdatum:
20. April 2010

Beiträge: 33

Danke, mit grep funktioniert es super. Das problem ist für mich gelöst.

Danke an alle und gruss

Quarzsnoopy

Anmeldungsdatum:
24. Dezember 2009

Beiträge: Zähle...

riffraff schrieb:

Wenn es definitiv NUR Ziffern oder NUR Buchstaben sind, könnte man mit

1
2
3
4
5
6
if [[ $1 = *[[:digit:]]* ]]
  then
  echo "$1 ist eine Zahl"
  else
  echo "$1 ist keine Zahl"
fi

Wenn der Input gemischt ist (wie 123Hallo), könnte man in dieser Richtung etwas machen:

1
2
3
4
5
6
7
#!/bin/sh

[[ -z "$1" ]] && echo "Bitte etwas eingeben" && exit 1
INPUT="$@"
[[ "$INPUT" == ?(+|-)+([0-9]) ]] && echo "$INPUT ist Numerisch" && exit 0
[[ "$INPUT" == +([a-zA-Z]) ]] && echo "$INPUT sind Buchstaben" && exit 0
[[ "$INPUT" == *([0-9]|[a-zA-Z])* ]] && echo "$INPUT ist Alpha-Numerisch" && exit 0

Das funktioniert leider nicht richtig:

1
2
3
4
5
6
7
for A in 123 ABC Def ghi 1a a1 ; do if [[ ${A} = *[[:digit:]]* ]] ; then echo "${A} ist eine Zahl" ; else echo "${A} ist keine Zahl" ; fi; done
123 ist eine Zahl
ABC ist keine Zahl
Def ist keine Zahl
ghi ist keine Zahl
1a ist eine Zahl
a1 ist eine Zahl

Aber das hier ist schon besser:

1
2
3
4
5
6
7
8
for A in 123 ABC Def ghi 1a a1 ; do if [[ ${A} = ?(+|-)+([0-9]) ]] ; then echo "${A} ist eine Zahl" ; else echo "${A} ist keine Zahl"
; fi; done
123 ist eine Zahl
ABC ist keine Zahl
Def ist keine Zahl
ghi ist keine Zahl
1a ist keine Zahl
a1 ist keine Zahl
Antworten |