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 +%sGNUdateまたは互換性、または
  • 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ビット整数を使用するシステムまたはシェル(たとえば)で問題が発生する可能性があります。

おすすめ記事