日付確認をきっちりするようにした。ただし作業年と同年の日付が対象(日付確認については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