Sprawdzanie daty wprowadzenia skryptu użytkownika

Odpowiedzi:

1

Ta metoda traktuje dane wejściowe jako łańcuch, a następnie analizuje i testuje je w celu prawidłowego formatowania. W tym formularzu sprawdzam również, czy pola w dacie są poprawne, ale możesz usunąć te warunkowe, jeśli ich nie potrzebujesz.

#!/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"
Chris
źródło
1

Możesz wybrać opcję akceptowania wielu formatów i konwertowania ich do standardowego formularza; date polecenie może pomóc:

$ 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
Toby Speight
źródło
Mam problem z uruchomieniem tego w ogóle. Przeczytałem datę w zmiennej $ YMD i tam chcę kontynuować, jeśli data ma właściwy format, w przeciwnym razie chciałbym ponownie poprosić użytkownika o ponowne wprowadzenie daty we właściwym formacie.
THE DOCTOR
Pokaż nam swój kod! Powyższy fragment robi coś pożytecznego, ale nie mogę (jeszcze) zobaczyć, dlaczego nie jest to dla Ciebie przydatne.
Toby Speight