아래의 간단한 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비트 정수를 사용하는 시스템이나 셸(예:)에서 문제가 발생할 수 있습니다.