【发布时间】: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