Shell-Script

以 HH:MM:SS 格式比較兩次 - ksh

  • February 11, 2016

是否可以比較兩個時間(24 小時制)?我需要的是檢查第一次是否早於第二次。

例子:

$ ./script.ksh 09:30:15 13:00:34
okay
$ ./script.ksh 05:25:00 02:30:50
invalid arguments

當這兩個值在這樣的變數中時:

a="09:30:15"
b="13:00:34"

然後您可以使用它來比較這些值(使用ksh93):

[ "${a//':'}" -lt "${b//':'}" ] && echo "okay" || echo "invalid arguments"

這使用kshs 參數擴展${parameter//pattern/string}。從手冊頁:

擴展參數並用給定的字元串替換模式的最長匹配。

$$ … $$ 模式的每個匹配都被給定的字元串替換。

所以09:30:15擴展到093015和。這些是實用程序可以比較的整數。從手冊頁:13:00:34``130434``test

   INTEGER1 -lt INTEGER2
          INTEGER1 is less than INTEGER2

編輯: with ksh88which 沒有該功能${parameter//pattern/string},您必須先刪除:withsed然後比較值:

a="$(printf '%s' "$a" | sed -e 's/://g')"
b="$(printf '%s' "$b" | sed -e 's/://g')"
[ "$a" -lt "$b" ]  && echo "okay" || echo "invalid arguments"

引用自:https://unix.stackexchange.com/questions/236559