如何在 if 条件下比较时间?

如何在 if 条件下比较时间?
#!/bin/bash
tag=$(awk -F, 'NR==1{print $1}' /tmp/time.txt)# output: 17:00
sub_time=$(date -d"${tag}  +1:00" +'%H:%M')output: 16:00
current_time=$(date |awk 'NR==1{print $4}' output: 05:51:16
if [[ "$sub_time" -ge "$current_time" ]];then
   crontab  <<EOF
   */15 * * * *  bash server_shutdown.sh
EOF
fi

我想通过if条件将当前系统中的“current_time”与来自VM的带有“sub_time”的VM关闭标签进行比较。

答案1

date将字符串转换为时间戳会更安全:

%s 自 1970-01-01 00:00:00 UTC 以来的秒数

[[ $(date +%s -d "$sub_time") -ge $(date +%s -d "$current_time") ]]

当然,你可以在创建变量时直接这样做:

sub_time=$(date -d"${tag}  +1:00" +%s)
current_time=$(date +%s)
if [[ $subtime -ge $current_time ]]; then
   ...
fi

  • 您不需要current_time自己创建,而是可以使用 bash 变量$EPOCHSECONDS( bash> 5.0)。
  • 您也可以使用printf而不是date来创建它:printf -v current_time '%(%s)T'

请注意,这些选项可能不太易于移植。

答案2

#!/bin/bash
tag=$(awk -F, 'NR==1{print $1}' /tmp/time.txt)# output: 17:00
sub_time=$(date -d"${tag}  +1:00" +'%H:%M')#output: 16:00
current_time=$(date |awk 'NR==1{print substr($5,0,5)}')#output: 05:51
# on my system the 5th field has the time while the 4th field has the year.
# so I changed that in awk
if [[ "$sub_time" > "$current_time" ]];then # comparison done lexicographically
   crontab  <<EOF
   */15 * * * *  bash server_shutdown.sh
EOF
fi

相关内容