Shell Script-Benutzereingabe-Datumsüberprüfung

5473
THE DOCTOR

Wie gehe ich vor, um die Datumsüberprüfung der Benutzereingaben in einem Shell-Skript durchzuführen? Ich möchte den Benutzer benachrichtigen, wenn er das Datum im falschen Format eingibt. Das korrekte Format wäre YYYYMMDD.

1
Dafür gibt es bereits einen guten Beitrag: http://stackoverflow.com/questions/18709962/bash-regex-if-statement rfportilla vor 9 Jahren 0

2 Antworten auf die Frage

1
Toby Speight

Möglicherweise möchten Sie die Option, viele Formate zu akzeptieren und in ein Standardformat zu konvertieren. Der dateBefehl kann helfen:

$ day=$(unset day; until date -d "$" '+%Y%m%d' 2>/dev/null do read -p "Which day? " day done) Which day?  Which day? weds  Which day? friday $ echo $day 20150508 
Ich habe Probleme, das überhaupt zum Laufen zu bringen. Ich habe das Datum in eine Variable $ YMD eingelesen und möchte dort fortfahren, wenn das Datum das richtige Format hat. Andernfalls möchte ich den Benutzer erneut auffordern, das Datum im richtigen Format erneut einzugeben. THE DOCTOR vor 9 Jahren 0
Zeig uns deinen Code! Das obige Snippet macht etwas Nützliches, aber ich kann (noch) nicht verstehen, warum es für Sie nicht nützlich ist. Toby Speight vor 9 Jahren 0
1
Chris

Diese Methode behandelt die Eingabe als Zeichenfolge, analysiert sie und testet sie auf korrekte Formatierung. In diesem Formular kann ich auch überprüfen, ob die Felder im Datum korrekt sind. Sie können diese Bedingungen jedoch entfernen, wenn Sie sie nicht benötigen.

#!/bin/bash echo -n "Enter the date as YYYYMMDD >" read date if [ ${#date} -eq 8 ]; then year=$ month=$ day=$ month30="04 06 09 11" leapyear=$((year%4)) # if leapyear this is 0 if [ "$year" -ge 1901 -a "$month" -le 12 -a "$day" -le 31 ]; then if [ "$month" -eq 02 -a "$day" -gt 29 ] || [ "$leapyear" -ne 0 -a "$month" -eq 02 -a "$day" -gt 28 ]; then echo "Too many days for February... try again"; exit fi if [[ "$month30" =~ "$month" ]] && [ "$day" -eq 31 ]; then echo "Month $month cannot have 31 days... try again"; exit fi else echo "Date is out of range"; exit fi else echo "try again...expecting format as YYYYMMDD"; exit fi echo "SUCCESS!" echo "year: $year month: $month day: $day"