Datumsüberprüfung der Benutzereingabe per Shell-Skript

Datumsüberprüfung der Benutzereingabe per Shell-Skript

Wie führe ich eine Datumsüberprüfung für Benutzereingaben in einem Shell-Skript durch? Ich möchte den Benutzer benachrichtigen, wenn er das Datum im falschen Format eingibt. Das richtige Format wäre JJJJMMTT.

Antwort1

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

#!/bin/bash
echo -n "Enter the date as YYYYMMDD >"
read date
if [ ${#date} -eq 8 ]; then
    year=${date:0:4}
    month=${date:4:2}
    day=${date:6:2}
    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"

Antwort2

Möglicherweise möchten Sie viele Formate akzeptieren und in eine Standardform konvertieren. Der folgende dateBefehl kann Ihnen dabei helfen:

$ day=$(unset day;
        until date -d "${day:-XXX}" '+%Y%m%d' 2>/dev/null
          do read -p "Which day? " day
        done)
Which day? 
Which day? weds 
Which day? friday
$ echo $day
20150508

verwandte Informationen