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를 비교하세요.