首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较ubuntu中的短日期与bash脚本中的date其他虚拟服务器

比较ubuntu中的短日期与bash脚本中的date其他虚拟服务器
EN

Stack Overflow用户
提问于 2022-04-22 11:53:39
回答 1查看 36关注 0票数 0

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

代码语言:javascript
复制
root@hcloud-admin:/home/scripts# hcloud server describe Miguel-Zabbix-hel1-dc2 | awk 'NR == 4' | awk -F " " '{ print $2, $3, $4 }'

输出:

代码语言:javascript
复制
Mon Mar 28

还可以使用hcloud CLI从我的矿用服务器主机获得日期:

代码语言:javascript
复制
root@hcloud-admin:/home/scripts# date +"%a %b %d"
Fri Apr 22

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

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

全部产出:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-22 15:22:39

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

代码语言:javascript
复制
date_1=$(hcloud server describe Miguel-Zabbix-hel1-dc2 | sed -n 's/^Created:\([^(]*\).*$/\1/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.

注意,$((.))结构只做整数运算,并且它会四舍五入,所以您可能想要调整算法以满足您的确切需要。此外,这个简单的计算没有考虑任何日期计算的细微差别,如夏时制,或闰秒等,但对于你的情况,我怀疑这些是非常重要的。

另外,请注意,我使用的是sed而不是awk。对于这种类型的任务,sed更简洁,但可能有点复杂,因此我将为您详细分析-n 's/^Created:\([^(]*\).*$/\1/p'参数:

  • -n:如果在当前行中找到pat,请不要用default.
  • s/pat/rep/p:打印每一行,用rep替换并打印.

在我们的例子中,pat是:

  • ^Created::行(^)的开头,后面跟着确切的字符串'Created:',
  • \(:开始记住下面的内容,
  • [^(]*:任意字符(.)这不是字符串中的(^) (‘,重复0次或多次(*),
  • \):停止记忆,
  • .*$:任何单个字符(.)重复0次或多次,后面是行尾($).

rep

  • \1:记忆中的第一件事(即在Created:之后和().

之前的一切)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71968313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档