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 +%sGNU date또는 호환 가능, 또는
  • 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비트 정수를 사용하는 시스템이나 셸(예:)에서 문제가 발생할 수 있습니다.

관련 정보