Mac이 24시간 이상 실행된 경우 Mac을 종료하는 작은 종료 스크립트가 있습니다. 나는 Bash 스크립팅에 대한 실제 경험이 없지만 다음을 수행했습니다.
!/bin/bash
#Maximum number of days to be up
max=1
#Get the uptime days and assign it to a variable
uptime_days=`uptime | cut -d " " -f 5`
if [ $uptime_days -ge $max ]
then
shutdown -h now
fi
exit 0
이제 다음 오류 메시지가 나타납니다.
./shutdown: line 9: (: days,: integer expression expected
누구든지 도와줄 수 있나요?
답변1
이는 macOS에서 작동합니다. 출시 타임스탬프를 얻은 다음 초 단위의 현재 타임스탬프를 얻은 다음 몇 가지 계산 결과를 얻었습니다.
#!/bin/bash
BOOT_TIME=$(sysctl -n kern.boottime | sed -e 's/.* sec = \([0-9]*\).*/\1/')
CURR_TIME=$(date +%s)
MAX_UPDAYS=1 #Days
DAYS_UP=$(( ( $CURR_TIME - $BOOT_TIME) / 86400 ))
if [ $DAYS_UP -ge ${MAX_UPDAYS} ];then
shutdown -h now
fi
답변2
스크립트의 주요 오류는 cut
다음과 같습니다.
uptime_days=`uptime | cut -d " " -f 4`
5
로 변경된다는 점에 유의하세요 4
. 이는 컷이 days
앞에 있는 숫자가 아닌 단어를 선택하기 때문입니다.
echo
이러한 오류를 잡는 방법은 코드에 다음을 추가하는 것입니다.
echo uptime_days=$uptime_days
따라서 출력에 다음이 포함되면
uptime_days=days,
분명히 구문 분석 중에 일부 오류가 발생했습니다.
향후 문제를 방지하기 위해 개선할 수 있는 몇 가지 다른 사항이 있습니다.
셰르본
#!
커널이 읽을 수 있도록 스크립트의 첫 번째 줄은 로 시작해야 합니다 . 어쨌든 코드는 셸에 의해 해석되지만 명령을 다르게 실행하면 맨 위 줄이 다음과 같이 표시되지 않을 수 있습니다.
#!/bin/bash
좋은 생각이에요.
이중 괄호
셸에서 조건문에 이중 대괄호를 사용하면 오류가 발생할 가능성이 줄어듭니다. 다음과 then
같이 같은 줄로 이동할 수도 있습니다 if
.
if [[ $uptime_days -ge $max ]]; then
echo shutdown!
fi
답변3
전체 스크립트는 다음과 같습니다.
#!/bin/bash
uptime | grep -q days && shutdown -h now