微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

试图从现在开始计算 ssl 证书的剩余天数 不需要dateutils的替代解决方案注意事项说明

如何解决试图从现在开始计算 ssl 证书的剩余天数 不需要dateutils的替代解决方案注意事项说明

我正在尝试编写一个 bash 脚本,该脚本将取出 openssl -enddate 命令并将其与 dateutil.ddiff 进行比较,并想知道还剩多少天。

SSLDATE=`openssl x509 -noout -in wild.crt -enddate | sed -e 's/notAfter=//g' | awk '{print $4"-""03""-"$2}'`

现在我已经安装了 dateutils 包,它为我提供了这个工具。但是我不知道如何使用 $SSLDATE - $Now 计算?

另外还有一种方法,因为 openssl -enddate 以字母格式给出月份,而 dateutils 以数字格式接受

知道如何实现它吗? 例如

dateutils.ddiff 2021-04-12 2022-04-15 -f '%dd'
**368d**

或者有其他替代方法吗?

解决方法

不需要dateutils的替代解决方案

https://stackoverflow.com/a/66921470/13982210


我不熟悉 openssldateutils。但是,我可以提供的解决方案(可能不是最好或最有效的)是:

#!/usr/bin/env bash
# line broken with \ for readability
ssldate=$(openssl x509 -noout -in example.crt -enddate \
    | awk -F '=' '{print $2}')
    # alternatively
  # | cut -d = -f 2

# use the variable `$ssldate` in your `dateutils` command
dateutils.ddiff today "$(date --date="$ssldate" '+%F')" -f '%dd'

注意事项

  • 大写变量在脚本中不是首选,以避免与系统/外壳环境变量发生冲突。 refer this answer
  • 不推荐使用反引号语法 ``,取而代之的是支持嵌套的 $()

说明

抱歉,我没有可进一步阅读任何概念的参考文献列表。希望手册页和/或搜索引擎可以填写。

  • $(command) 命令替换。 `` 的新语法将命令的输出转换为字符串,该字符串可用作另一个命令中的参数或存储在变量中
  • openssl ... | awk ... | 管道运算符从 LHS 获取标准输出并将其作为标准输入传递给 RHS
  • awk 在没有文件名参数的情况下处理通过管道标准输入接收的数据
    • 通常适用于领域。将文本视为包含行和列的表格。
    • -F '='字段分隔符设置为= - 即将每一行拆分为字段的字符(默认为空格)
    • '{print $2}' 打印 second 字段
  • alt: cut 同样的原则。 -d 设置进行字段拆分的 分隔符-f 字段编号
  • date [-d | --date=]<DATESTRING> '+%F'(GNU 日期) - 格式为 %F 完整日期 (YYYY-MM-DD)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。