を使用し、日付と時刻を検証します。例についてはデータは、時間の検証は、私は、ユーザーからの</p> <ol> <li>日付形式</li> <li>時間形式</li> <li>日</li> <li>時間</li> </ol> <p>を受け入れるシェルスクリプトを書きたいシェルスクリプト
:
./test.sh mmddyyyy hhmmss 12122012 121212
は、正しい結果を返す必要があります。
を使用し、日付と時刻を検証します。例についてはデータは、時間の検証は、私は、ユーザーからの</p> <ol> <li>日付形式</li> <li>時間形式</li> <li>日</li> <li>時間</li> </ol> <p>を受け入れるシェルスクリプトを書きたいシェルスクリプト
:
./test.sh mmddyyyy hhmmss 12122012 121212
は、正しい結果を返す必要があります。
使用このあなたが得る場合は0、あなたの日付はあなたがスクリプトへの入力を解析し、検証するためにexpr
事業者と一緒にif
かcase
文のいずれかを使用してしようとしているものを行うことができ、有効な
date "+%d/%m/%Y" -d "03/10/2016" > /dev/null 2>&1
is_valid=$?
です。鍵は、入力のdate
とコンポーネントを解析して、date --date=""
によって解釈できる形式にすることです。あなたが取ることができるいくつかのアプローチがあります。以下はあなたの例の入力を使用して、最小限の例です:
#!/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
使用例/出力
$ sh datetmstr.sh mmddyyyy hhmmss 12122012 121212
Wed Dec 12 12:12:12 CST 2012
あなたは追加の日付/時刻の入力フォーマットを追加するには、このアプローチに基づいて構築することができます。 POSIXシェルは文字列処理ルーチンの中で最大の選択肢を持っていませんが、このタイプの作業には十分以上のものがあります。
これは広すぎます。 [mcve]を表示し、[ask]にもチェックを入れてください。 – fedorqui