Bash

Bash 紀元日期比較不起作用

  • December 18, 2017

需要一些幫助來修復下面的簡單 bash 腳本。它的作用是使用 if else 比較紀元格式的日期。該腳本沒有按我的預期工作,因為它總是一直處於第一個條件 DEPLOY 。

即使我將 deploymentDate 變數設置為大於 currentDate 它仍然會進入第一個條件。

任何人都可以建議如何解決它?

#!/bin/bash 
currentDate=$(date +s% ) 
deploymentDate=1513516201 

if [ "$currentDate" > "$deploymentDate" ] 
then 
   XSL="DEPLOY" 
else 
   XSL="DO NOT DEPLOY" 
fi 
echo $XSL 

輸出

DEPLOY

日期使用錯誤。

  • 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 日期格式進行數值比較,但您可能會在系統或 shell(如)上使用 32 位整數進行算術運算時遇到問題。

引用自:https://unix.stackexchange.com/questions/411516