요일을 기준으로 If-Else 쿼리를 사용하는 방법은 무엇입니까?

요일을 기준으로 If-Else 쿼리를 사용하는 방법은 무엇입니까?

문제: 오늘이 목요일인지 확인하고 이 사례의 결과에 따라 다른 작업을 수행해야 합니다. 나는 두 가지 다른 접근 방식을 시도했습니다.

날짜 이름 가져오기:

DAYOFWEEK=$(date +"%a")
echo DAYOFWEEK: $DAYOFWEEK
if ["$DAYOFWEEK" == "Thu"]; 
then   
   echo YES
else
    echo NO
fi

일수를 얻으십시오 :

DAYOFWEEK=$(date +"%u")
echo DAYOFWEEK: $DAYOFWEEK

if ["$DAYOFWEEK" == 4]; 
then
   echo YES
else
   echo NO
fi

두 경우 모두 "예"여야 하지만 출력은 "아니요"입니다. 뭐가 문제 야?

답변1

문제는 공백이 부족하다는 것입니다.

[다음 코드는 내장 명령이 ==별칭으로 허용되는 셸에서 실행됩니다 =.

if [ "$DAYOFWEEK" == 4 ];  then    echo YES; else    echo NO; fi

하지만 기억하세요( 참조 help test) bash.

  • ===공식적으로 언급되지 않았으며 문자열 비교 에 사용해야 합니다.
  • -eq소수 산술 테스트의 경우(여기에서는 아무런 영향을 미치지 않지만, 예를 들어 수치적으로는 동일하지만 어휘적으로는 다른 경우를 비교할 때 date +%u적용됩니다 ).date +%d044

내가 선호하는:

 if [ "${DAYOFWEEK}" -eq 4 ];  then    echo YES; else    echo NO; fi

일반적으로 하루를 더 즐겨야 합니다.숫자방법은 전류에 대한 의존도가 적기 때문에로케일. 내 시스템에서 출력은 date +"%a"Today 입니다 Do.

답변2

case이런 종류의 작업을 수행하는 데 일반적으로 어떤 방법이 더 좋은 방법인지 놓치지 마세요 .

또한 의 출력은 date +%a로케일에 따라 다르므로 영어 이름이 필요한 경우 프랑스어 또는 한국어 사용자가 호출하면 스크립트 작동이 중지됩니다.

case $(LC_ALL=C date +%a) in
   (Mon) echo first day of the week;;
   (Thu) do-something;;
   (Sat|Sun) echo week-end;;
   (*) echo any other day;; # last ;; not necessary but doesn't harm
esac

$(...)위의 경우는 인용이 필요하지 않은 드문 경우 중 하나입니다(인용부호는 문제가 되지 않지만 에서와 동일 var="$(...)").

답변3

같은 생각입니다. 아래 코드를 사용하여 선택한 시간 전에 cron을 "비활성화"했습니다.
물론, 필요한 권한이 부여된다면 crontab 자체를 수정하는 편이 낫습니다. :)

이것은 밤이 아닌 이상 bash 스크립트를 중단하는 간단한 테스트입니다.

# Delay or restrict execution.
# Here, we quit unless hour is greater than (gt) 2 and (-a) lower than (lt) 7
# i.e. execution happens only at 3,4,5&6 o'clock.
if  /usr/bin/test `date '+%H'` -gt 2 -a `date '+%H'` -lt 7; then
  echo LETS_START_PROCESSING;
else
  exit;
fi

#Put job here

답변4

먼저 DAYOFWEEK="$(date +%u)" 과제를 인용해야 합니다.

그리고 [, ] 괄호 양쪽에 공백이 있어야 합니다.

줄 끝의 세미콜론은 중복됩니다.

관련 정보