需要一些帮助来修复下面的简单 bash 脚本。它的作用是使用 if else 比较纪元格式的日期。该脚本无法按我的预期工作,因为它始终处于第一个条件“部署”。
即使我将部署日期变量设置为大于当前日期,它仍然会达到第一个条件。
谁能建议如何修复它?
#!/bin/bash
currentDate=$(date +s% )
deploymentDate=1513516201
if [ "$currentDate" > "$deploymentDate" ]
then
XSL="DEPLOY"
else
XSL="DO NOT DEPLOY"
fi
echo $XSL
输出
DEPLOY
答案1
日期使用错误。
date +%s
与 GNUdate
或兼容,或者awk 'BEGIN{srand(); printf "%lu\n", srand()}'
大多数awk
实现(将由 POSIX 规范的下一版本保证)
错误的语句用法:
if ((currentDate > deploymentDate))
(ksh
// )zsh
bash
if [ "$currentDate" -gt "$deploymentDate" ]
(POSIX)
或者,您可以使用 YYYY-mm-dd HH:MM:SS 格式的 UTC 日期并使用词法比较:
currentDate=$(date -u +'%Y-%m-%d %T')
deploymentDate='2017-12-17 13:10:01' # UTC
if [[ "$currentDate" > "$deploymentDate" ]] # ksh/bash/zsh
if expr "$currentDate" '>' "$deploymentDate" > /dev/null # POSIX
mksh
或者与 YYYYmmddHHMMSS 日期格式进行数值比较,但您可能会在使用 32 位整数进行算术的系统或 shell(例如 )上遇到问题。