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"

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.