Bash 纪元日期比较不起作用

Bash 纪元日期比较不起作用

需要一些帮助来修复下面的简单 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// )zshbash
  • 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(例如 )上遇到问题。

相关内容