シェルスクリプトで時間を変更して比較する方法

シェルスクリプトで時間を変更して比較する方法

時間を比較するためにスクリプトを使用していますが、エラーが発生します。Quarterly_File.sh: line 139: [[: 0148: value too great for base (error token is "0142").時間(時間)形式で入力を変更して他の時間と比較する方法はありますか?私の入力は次のとおりです。

startTime=00:45
endTime=01:30
fileTime=01:42

:下図のように除去して比較してみました。

if (0142 -ge 0045 && 0142 -lt 0130)
    then 
    // my logic
fi

時間範囲は1時間範囲内でいつでも可能です。

はい

0000    0045,
0030    0130,
2345    0014 (of next day)

答え1

bash演算子をどのように使用するのかよくわかりませんが、(次のように動作します。)

if [ 0142 -ge 0045 ] && [ 0142 -lt 0130 ]; then
    echo "yep"
fi

必要なコードではない場合は、関連コードをできるだけ多く貼り付けてください。

編集する:

以下のコメントが示すように、8進数を(最終的に午前10時以降)10進数と比較するため、問題が発生します。

date時間を秒に変換してから比較することをお勧めします。

例は次のとおりです。

# grab these however you are currently
time1="01:42"
time2="00:45"
time3="01:42"
time4="01:30"

time1Second=$(date -d "${time1}" +%s)
time2Second=$(date -d "${time2}" +%s)
time3Second=$(date -d "${time3}" +%s)
time4Second=$(date -d "${time4}" +%s)

# then your comparison operators and logic:
if [ "$time1Second" -ge "$time2Second" ] && [ "$time3Second" -lt "$time4second" ]; then
    # logic here
    echo true
fi

これにより、常に同じベースの数字を比較できます。

答え2

時間を分に変換して比較します。

startTime=00:45
fileTime=01:42

hr=${startTime/:*} mn=${startTime/*:}      # Split hh:mm into hours and minutes
startMins=$(( ${hr#0} * 60 + ${mn#0} ))    # Minutes since midnight

hr=${fileTime/:*} mn=${fileTime/*:}
fileMins=$(( ${hr#0} * 60 + ${mn#0} ))

if [[ $fileMins -ge $startMins ]]; then : ...; fi

関連情報