如何解决试图从现在开始计算 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
我不熟悉 openssl
和 dateutils
。但是,我可以提供的解决方案(可能不是最好或最有效的)是:
#!/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 举报,一经查实,本站将立刻删除。