#!/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