Ich versuche, das Datumsmuster mit case
abzugleichen Befehl, aber es funktioniert nicht. Kann mir jemand helfen?
Eingabe :01/05/1900
oder 5/6/1900
Verwendete Case-Anweisung:
ptn="[0-9]|[0-9][0-9]/[0-9]|[0-9][0-9]/[0-9][0-9]|[0-9][0-9][0-9][0-9]"
case "$dt" in
$ptn ) echo "valid pattern" ;;
*) echo "invalid"
esac
Aber das in der case-Anweisung verwendete Muster wertet die obigen 2 Datumseingaben nicht aus.
Akzeptierte Antwort:
Versuche dies. case
versteht nur Globs, daher ist der Umgang mit einem Regexp nicht einfach. Der =~
Der Betreiber bietet hier jedoch einige Lösungen an.
#!/bin/bash
INP="01/05/1900"
ptn="^([0-9]|[0-9][0-9])/([0-9]|[0-9][0-9])/([0-9][0-9]|[0-9][0-9][0-9][0-9])$"
if [[ $INP =~ $ptn ]] ; then
echo valid pattern
else
echo invalid
fi
Wenn Sie die Größe des regulären Ausdrucks reduzieren möchten, ^[0-9]{1,2}/[0-9]{1,2}/([0-9]{2}|[0-9]{4})$
funktioniert auch genauso gut.