【问题标题】:Syntax for comparing dates on HP-UX box - not found error在 HP-UX 框中比较日期的语法 - 未找到错误
【发布时间】:2018-08-29 15:24:52
【问题描述】:

这是关于在 HP-UX 机器上检查 SSL 证书过期的问题。没有可用的日期 -d。

我有以下内容;

#!/bin/bash 

# Exit script if program fails or an unset variable is used
    set -eu 

server="BLABLA"
port="443"
graceperiod_days="30" 

# Get expiry date of SSL certificate, in format 'Jan 31 11:59:00 2018 GMT'
enddate="$(openssl s_client -connect "$server:$port" 2>/dev/null | openssl x509 -noout -enddate | sed -e 's#notAfter=##')" 

# Get today's date in format DD-MM-YYYY
todaysdate="$(date "+%d-%m-%Y")"
    echo "Today's date is $todaysdate" 

# Convert $enddate to format DD-MM-YYYY
enddate_formatted=$(printf '%s\n' "$enddate" | awk '{printf "%02d-%02d-%04d\n",$2,(index("JanFebMarAprMayJunJulAugSepOctNovDec",$1)+2)/3,$4}')
    echo "Certificate expiry date is $enddate_formatted" 

# Compare expiry date with today's date
if "$todaysdate" -ge "$("$enddate_formatted" - "$graceperiod_days")"
    then echo "$todaysdate is greater than $enddate_formatted. SSL certificate has expired!"
elif "$todaysdate" -lt "$("$enddate_formatted" - "$graceperiod_days")"
    then echo "$todaysdate is before $enddate_formatted. Everything is OK!"
else
    echo "ERROR"; fi 

据我所知,这应该可以,但是输出是;

Today's date is 29-08-2018
Certificate expiry date is 21-07-2018
./test[22]: 21-07-2018:  not found.
./test[22]: 29-08-2018:  not found.
./test[24]: 21-07-2018:  not found.
./test[24]: 29-08-2018:  not found.
ERROR 

怎么了?

【问题讨论】:

  • 使用比 Linux 更 Posix-y 的东西,比如 BSD 或 Solaris。或者查看POSIX date 的文档。
  • 一般来说,恕我直言,Perl 在所有 “麻烦的” 操作系统(SunOS、Solaris、AIX、HP-UX)中都更加一致,我通常建议您查看对于基于 Perl 的方法。

标签: bash date math compare hp-ux


【解决方案1】:

首先,您需要一种可以对其进行算术运算的形式的日期:

todaysdate_seconds=$(date +%s --date "$todaysdate")  # assuming GNU date
gp_seconds=$((graceperiod_days * 86400))
enddate_seconds=$(date +%s --date "$enddate_formatted")

其次,您的if 语句缺少可以检查其退出状态的命令。你所拥有的只是这样一个命令的参数。相反,使用

if test "$todaysdate_seconds" -ge "$("$enddate_seconds" - "$gp_seconds")"; then

或者更简单的bash算术命令

if (( todaysdate_seconds >= enddate_seconds - gp_seconds )); then

【讨论】:

  • 谢谢,非常感谢。由于它是一个 HPUX 盒子,GNU --date 不起作用(也不 -d),你知道如何最好地将 2 个日期格式化为自纪元以来的秒数而不使用 GNU 日期?
  • 我不知道 HPUX 附带了哪个版本的 date;查阅文档。
  • (如果您不使用 Linux,请不要在您的问题上使用 linux 标签。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 2019-01-05
  • 2017-06-23
  • 1970-01-01
相关资源
最近更新 更多