일부 시간 조건이 포함된 Bash 코드

일부 시간 조건이 포함된 Bash 코드

Bash 코드는 특정 시간 조건에서 바이너리 또는 기타 명령을 어떻게 실행할 수 있습니까? 의사코드

if time is between 6:00 - 9:00 run foo.sh

else if time is between 9:00 - 12:00 run bar.sh

else run foobar.sh

도와주세요

답변1

이와 같이:

#!/usr/bin/env bash

hour=$(date +%k)
if ((hour >= 6 && hour < 9)); then
    ./foo.sh
elif ((hour >= 9 && hour <= 12)); then
    ./bar.sh
else
    ./foobar.sh
fi

((...))$((...))표현식이 0이 아니면 종료 상태 0을 반환하고 표현식이 0이면 1을 반환하는 산술 명령입니다 . 부작용(할당)이 필요한 경우 "let"의 동의어로도 사용됩니다.

바라보다http://mywiki.wooledge.org/ArithmeticExpression


혐오감 POSIX:

#!/usr/bin/env sh

hour=$(date +%H)

if [ "$hour" -ge 6 ] && [ "$hour" -lt 9 ]; then
    ./foo.sh
elif [ "$hour" -ge 9 ] && [ "$hour" -lt 12 ]; then
    ./bar.sh
else
    ./foobar.sh
fi

또는

case "$hour" in
    ( 0[6-8]      ) echo '6:00 TO 8:59'  ;;
    ( 09 | 1[0-1] ) echo '9:00 TO 11:59' ;;
    ( *           ) echo 'rest'          ;;
esac

답변2

논리는 더 정확해야 합니다. 첫 번째 if 문은 09:00이고 두 번째 if 문은 09:00입니다. 첫 번째는 08:59 여야합니까? 아니면 두 번째는 09:01이어야 할까요? ":" 없이 날짜 함수를 사용하여 비교 시 hhmm으로 사용할 수 있습니다(시간에 제로 패딩 없음).

timenow=$(date +%k%M). 그런 다음 Gilles가 위에서 말한 대로 if를 실행하고 >=600 && <= 859와 >= 900 && <=1159를 비교하세요.

관련 정보