将 ubuntu 中的短日期与 bash 脚本中其他虚拟服务器的日期进行比较

Compare short dates in ubuntu with date other virtual server in bash script

我有一个命令来获取虚拟服务器的创建日期,从行中获取信息 Created: Mon Mar 28 07:19:50 UTC 2022 (3 weeks ago):

root@hcloud-admin:/home/scripts# hcloud server describe Miguel-Zabbix-hel1-dc2 | awk 'NR == 4' | awk -F " " '{ print , ,  }'

输出:

Mon Mar 28

还有来自我的矿服务器主机的 hcloud CLI 日期:

root@hcloud-admin:/home/scripts# date +"%a %b %d"
Fri Apr 22

能否请您帮忙,是否可以使用 bash script 来比较这两个日期,以确定服务器创建后是否已经过了 10 天?

如果 10 天过去了,我想在 bash 脚本中使用命令 hcloud server poweroof Miguel-Zabbix-hel1-dc2

完整输出:

root@hcloud-admin:/home/scripts# hcloud server describe Miguel-Zabbix-hel1-dc2
ID:             191220000
Name:           Miguel-Zabbix-hel1-dc2
Status:         running
Created:        Mon Mar 28 07:19:50 UTC 2022 (3 weeks ago)
Server Type:    cpx11 (ID: 22)
  ID:           22
  Name:         cpx11
  Description:  CPX 11
  Cores:        2
  Memory:       2 GB
  Disk:         40 GB
  Storage Type: local
Public Net:
  IPv4:
    IP:         11.111.111.111
    Blocked:    no
    DNS:        static.111.111.111.111.clients.your-server.de
  IPv6:
    IP:         0a99:4f9:p099:0d0b::/555
    Blocked:    no
  Floating IPs:
    No Floating IPs
Private Net:
    No Private Networks
Volumes:
  No Volumes
Image:
  ID:           15512600
  Type:         system
  Status:       available
  Name:         ubuntu-20.04
  Description:  Ubuntu 20.04
  Image size:   -
  Disk size:    5 GB
  Created:      Thu Apr 23 17:55:14 UTC 2020 (2 years ago)
  OS flavor:    ubuntu
  OS version:   20.04
  Rapid deploy: yes
Datacenter:
  ID:           3
  Name:         hel1-dc2
  Description:  Helsinki 1 DC 2
  Location:
    Name:               hel1
    Description:        Helsinki DC Park 1
    Country:            FI
    City:               Helsinki
    Latitude:           60.169855
    Longitude:          24.938379
Traffic:
  Outgoing:     208 MB
  Ingoing:      280 MB
  Included:     22 TB
Backup Window:  Backups disabled
Rescue System:  disabled
ISO:
  No ISO attached
Protection:
  Delete:       no
  Rebuild:      no
Labels:
  Name: Zabbix

是的。这个有可能。诀窍是将两个 date/time 字符串都转换为“自纪元以来的秒数”格式(日期 +%s),然后比较结果。在 Linux 的现代版本中,'date' 命令可以解释任何格式合理的日期字符串并将其转换为各种格式:

date_1=$(hcloud server describe Miguel-Zabbix-hel1-dc2 | sed -n 's/^Created:\([^(]*\).*$//p')
seconds_1=$(date -s "${date_1}" +%s)
seconds_2=$(date +%s)
day_diff=$(((seconds_2 - seconds_1)/86400)) # Number of seconds in a day = 86,400.

请注意,$((...)) 结构仅进行整数运算,并且会向下舍入,因此您可能需要调整运算以满足您的具体需要。此外,这个简单的计算没有考虑任何日期计算的细微差别,例如夏令时或 leap-seconds 等。但对于您的情况,我怀疑这些是否非常重要。

此外,请注意我使用了 sed 而不是 awksed对于这种类型的工作更简洁,但可能有点复杂,所以我会为你分解-n 's/^Created:\([^(]*\).*$//p'参数:

  • -n :默认不打印每一行
  • s/pat/rep/p:如果在当前行找到pat,替换为rep并打印

在我们的例子中,pat 是:

  • ^Created: :行首 (^),后跟确切的字符串 'Created:'、
  • \( : 开始回忆后面的内容,
  • [^(]* :字符串'('中不属于(^)的任意字符([...]),重复0次或多次(*),
  • \) : 停止记忆,
  • .*$ : 任意单个字符 (.) 重复 0 次或多次,后跟行尾 ($).

rep

  • :记住的第一件事(即 Created: 之后和 ( 之前的所有内容)。