Sie können, was tun Sie, indem Sie entweder if
oder case
Aussagen zusammen mit expr
Betreiber versuchen, die Eingabe in das Skript zu analysieren und zu validieren. Der Schlüssel besteht darin, die Komponenten date
und time
des Eingangs zu analysieren und in ein Format zu bringen, das von date --date=""
interpretiert werden kann. Es gibt eine Reihe von Ansätzen, die Sie ergreifen können. Unten ist ein minimales Beispiel Ihres Beispiel Eingabe verwendet:
#!/bin/sh
[ "$#" -lt "4" ] && {
printf "error: insufficient input.\n"
printf "usage: %s datestr timestr date time\n" "${0//*\//}"
printf " eg: %s mmddyyyy hhmmss 01012011 122515\n" "${0//*\//}"
exit 1
}
datestr=
timestr=
case "$1" in
"mmddyyyy")
[ $(expr length "$3") -ne "8" ] && {
printf "error: invalid date for format.\n"
printf " '%s' != '%s'\n" "$1" "$3"
exit 1
}
datestr="$(expr substr "$3" 1 2)"
datestr="$datestr/$(expr substr "$3" 3 2)"
datestr="$datestr/$(expr substr "$3" 5 4)"
;;
*) printf "error: invalid date format '%s'\n" "$1"
;;
esac
case "$2" in
"hhmmss")
[ $(expr length "$4") -ne "6" ] && {
printf "error: invalid time for format.\n"
printf " '%s' != '%s'\n" "$2" "$4"
exit 1
}
timestr="$(expr substr "$4" 1 2)"
timestr="$timestr:$(expr substr "$4" 3 2)"
timestr="$timestr:$(expr substr "$4" 5 2)"
;;
*) printf "error: invalid time format '%s'\n" "$2"
;;
esac
printf "%s\n" "$(date -d "$datestr $timestr")"
exit 0
Beispiel Verwendung/Output
$ sh datetmstr.sh mmddyyyy hhmmss 12122012 121212
Wed Dec 12 12:12:12 CST 2012
Sie können bei diesem Ansatz bauen Formate, um zusätzliches Datum/Zeit-Eingabe. Die POSIX-Shell hat nicht die größte Auswahl an Routinen für die Verarbeitung von Strings, aber sie hat mehr als genug für diese Art von Arbeit.
Nun, das ist zu breit. Bitte zeigen Sie [mcve] und prüfen Sie [ask]. – fedorqui