![요일을 기준으로 If-Else 쿼리를 사용하는 방법은 무엇입니까?](https://linux55.com/image/29393/%EC%9A%94%EC%9D%BC%EC%9D%84%20%EA%B8%B0%EC%A4%80%EC%9C%BC%EB%A1%9C%20If-Else%20%EC%BF%BC%EB%A6%AC%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
문제: 오늘이 목요일인지 확인하고 이 사례의 결과에 따라 다른 작업을 수행해야 합니다. 나는 두 가지 다른 접근 방식을 시도했습니다.
날짜 이름 가져오기:
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 +%d
04
4
내가 선호하는:
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)" 과제를 인용해야 합니다.
그리고 [, ] 괄호 양쪽에 공백이 있어야 합니다.
줄 끝의 세미콜론은 중복됩니다.