Bash
Bash 紀元日期比較不起作用
需要一些幫助來修復下面的簡單 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 位整數進行算術運算時遇到問題。