Problem mit test und regular expression

J

jostrn

Grünschnabel
Vorweg meine besten Grüße :)

Folgender RegEx Test funktioniert bei mir nicht... was mache ich falsch?

Code:
#!/bin/bash
echo -n "Geben Sie a, b oder c ein "
read answer
until [[ "$answer" =~ "[abcABC]" ]]; do
	echo -n "Erlaubt sind nur a, b oder c. Bitte richtig eingeben: "
	read answer
done

Vielen Dank und Grüße
 
Was hältst du von folgendem:
Code:
#!/bin/bash
echo -n "Geben Sie a, b oder c ein "
read answer
until [ $(echo "$answer" | grep ^[a-cA-C]$) ]; do
    echo -n "Erlaubt sind nur a, b oder c. Bitte richtig eingeben: "
    read answer
done
Ergäbe:
Code:
Geben Sie a, b oder c ein 
Erlaubt sind nur a, b oder c. Bitte richtig eingeben: AB
Erlaubt sind nur a, b oder c. Bitte richtig eingeben: asdgahrs
Erlaubt sind nur a, b oder c. Bitte richtig eingeben: ccc
Erlaubt sind nur a, b oder c. Bitte richtig eingeben: c
<fertig>
 
Zuletzt bearbeitet:
Hi,

portabler ist wahrscheinlich die Variante von daboss, aber wenn du doch lieber =~ verwenden moechtest, lies dir mal diesen alten thread durch:
http://www.unixboard.de/vb3/showthread.php?t=35123

An dem Operator wurde vor einiger Zeit was am quoting geaendert, d.h. es ist wichtig welche bash Version du benutzt. Eventuell musst du einfach die Anfuehrungszeichen weglassen.

Edit:
Folgender RegEx Test funktioniert bei mir nicht... was mache ich falsch?
Dass du keine Fehlermeldung angibst. ;p

mfg,
bytepool
 
Zuletzt bearbeitet:
ich würde alles was mit optionen und steuerung eines scriptes zu tun hat immer mit getopts machen. früher habe ich auch diesen krampfigen read unsinn gemacht.

sobald das script aber komplexer wird macht das keinen spaß mehr dass nachträglich da reinzufummeln.

generell würde ich das aber mit ner case abfrage regeln:

Code:
#!/bin/bash

ANSWER= #initialisiert die Variable. ist manchmal notwensdig

get_answer()
{
read -n 1 -p "Geben Sie a, b oder c ein " ANSWER
${ANSWER:="Standartantwort"} 2> /dev/null #unterbindet unberechtigtes meckern
verify_answer
} 

verify_answer()
{
  case $ANSWER in
   a) do something
   ;;
   b) do something
   ;;
   c) do something
   ;;
   A) do something
    ;;
   B) do something
   ;;
   C) do something
   ;;
   *) echo ""Erlaubt sind nur a, b oder c. Bitte richtig eingeben:" &&   get_answer 
    esac
}

get_answer
 
Zuletzt bearbeitet:

Ähnliche Themen

Verschlüsseltes Backup-Script mit rsync

Summe von Zahlen in einer Zeilen bilden

verzeichniss suche funktioniert nicht

subprocess.Popen() - Stream Stout

Shellskript - Fehler in Cron

Zurück
Oben