日付確認をきっちりするようにした。ただし作業年と同年の日付が対象(日付確認については2月以外で問題は発生しないが)。
とりあえず対象はメールログ(ログの第2フィールドが日付、第3フィールドが:区切りで時刻[hh:mm:ss]となっているもの)。
このバージョンでは、同月内のみ対応。
#!/bin/bash
thisVer (){
if [ $fromMonth -ne $toMonth ];then
echo " このバージョンでは、同月内のみの対応です。ごめんなさい。"
exit 1
fi
}
iInput (){
if [ $i -ne 0 ]; then
echo "入力した値が間違っています。再入力してください。"
fi
}
check_M (){
i=0
checkMonth=-1
until [ $checkMonth -ge 1 -a $checkMonth -le 12 ]
do
iInput
echo -n $1
read checkMonth
i=1
done
return $checkMonth
}
check_D (){
check_D_Re (){
iInput
echo -n $D_string
read checkDay
i=1
date --date "$D_month/$checkDay" >/dev/null 2>&1
}
i=0
D_month=$1
D_string=$2
checkDay=-1
until [ $? -eq 0 -a $i -ne 0 ]
do
check_D_Re
done
return $checkDay
}
check_H (){
i=0
checkHour=-1
until [ $checkHour -ge 0 -a $checkHour -le 23 ]
do
iInput
echo -n $1
read checkHour
i=1
done
return $checkHour
}
check_T (){
i=0
checkTime=-1
until [ $checkTime -ge 0 -a $checkTime -le 59 ]
do
iInput
echo -n $1
read checkTime
i=1
done
return $checkTime
}
echo "日時範囲を指定してください。"
check_M "開始月:"
fromMonth=$?
check_D $fromMonth "開始日:"
fromDay=$?
check_H "開始時:"
fromHour=$?
check_T "開始分:"
fromMin=$?
check_T "開始秒:"
fromSec=$?
check_M $toMonth "終了月:"
toMonth=$?
thisVer
check_D $toMonth "終了日:"
toDay=$?
check_H "終了時:"
toHour=$?
check_T "終了分:"
toMin=$?
check_T "終了秒:"
toSec=$?
FROM=$(date --date "$fromMonth/$fromDay $fromHour:$fromMin:$fromSec" +%s)
TO=$(date --date "$toMonth/$toDay $toHour:$toMin:$toSec" +%s)
if [ $TO -lt $FROM ]; then
echo "エラー! 終了日時が開始日時より前になっています。"
exit 1
fi
if [ $fromDay -eq $toDay ]; then
if [ $fromHour -eq $toHour ]; then
if [ $fromMin -eq $toMin ]; then
if [ $fromSec -eq $toSec ]; then
echo "{split(\$3, a, \":\");if(\$2==$fromDay&&a[1]==$fromHour&&a[2]==$fromMin&&a[3]==$fromSec)print}"
else
echo "{split(\$3, a, \":\");if(\$2==$fromDay&&a[1]==$fromHour&&a[2]==$fromMin&&a[3]>=$fromSec&&a[3]=$fromSec)||(a[2]>$fromMin&&a[2]=$fromSec)||(a[1]==$fromHour&&a[2]>$fromMin)||(a[1]>$fromHour&&a[1]=$fromSec)||(a[1]==$fromHour&&a[2]>$fromMin)||(a[1]>$fromHour)))||(\$2>$fromDay&&\$2