요일이 날짜 집합인 경우 If-Else를 사용하여 일부 작업을 수행하려면 어떻게 해야 합니까?

요일이 날짜 집합인 경우 If-Else를 사용하여 일부 작업을 수행하려면 어떻게 해야 합니까?

요일이 월요일, 화요일 또는 수요일이면 일부 스크립트를 실행해야 한다는 요구 사항이 있으며, 그렇지 않으면 아무것도 실행하지 않습니다.

if [[ $(date '+%a') == "Mon" && $(date '+%a') == "Tue" && $(date '+%a') == "Wed" ]]
then
echo "PERFORM TASK"
else
echo "DONT DO ANYTHING"
 fi

난 아무것도 안 해

이것은 잘못된 것입니다. 오늘 날짜가 "월요일"이기 때문에... "작업 실행"이 나올 것으로 예상됩니다... 월요일에만 수행하면 작동합니다... if [[ $(date '+%a') == "Mon" ]]다른 날을 추가하면 작동하지 않습니다. ...내가 뭘 잘못했나요? 도와주세요.

답변1

case "$(date +%a)" in
   Sun)
     handle_sunday_stuff
     break
     ;;
   Tue|Thu)
     handle_tuesday_thursday_stuff
     break
     ;;
   Wed)
     handle_wednesday_stuff
     break
     ;;
   *)
     echo "Nothing to do today"
     ;;
esac

답변2

당신은 묻고 있습니다

if today is Monday AND today is Tuesday AND ...

이것은 분명히 사실일 수 없습니다. &&AND 조건부 연산자 입니다 . 아마도 필요한 것은 ||OR 조건부 연산자입니다.

today=$(date +'%a')
if [[ $today == "Mon" || $today == "Tue" || $today == "Wed" ]]
then
    echo "PERFORM TASK"
else
    echo "DON'T DO ANYTHING"
fi

효율성을 이유로 명령이 한 번만 실행되도록 date조건 외부로 이동했습니다 . if...(이것은 또한 일요일/월요일 또는 수요일/목요일 자정에 잠재적인 경쟁 상황을 방지합니다.)

답변3

&&귀하의 조건에서 대신 사용하고 있다는 것은 요일이 ||출력되어야 함을 의미합니다 .PERFORM TASK모두그 시절.

대신에:

day="$( date +"%a" )"

if [[ "$day" =~ ^(Mon|Tue|Wed)$ ]]; then
    echo "PERFORM TASK"
else
    echo "DON'T DO ANYTHING"
fi

(이 솔루션은 이러한 방식으로 정규식을 실행하는 다른 쉘을 bash가정 합니다 )ksh93=~

관련 정보