以下の単純な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ビット整数を使用するシステムまたはシェル(たとえば)で問題が発生する可能性があります。