스크립트 시작 부분에서 시작하고 끝 부분에서 멈추는 타이머가 필요합니다.
답변1
지속 시간을 초 단위로 원하면 상단에서 사용하십시오.
start=$SECONDS
마침내
duration=$(( SECONDS - start ))
답변2
Linux에 내장된 time
명령을 사용할 수 있습니다. 매뉴얼 페이지에서:
시간 명령 [매개변수]
시간은 FORMAT 문자열에서 COMMAND가 사용하는 리소스에 대해 표시되는 정보를 결정합니다. 명령줄에 형식이 지정되지 않았지만 TIME 환경 변수가 설정된 경우 해당 값이 형식으로 사용됩니다.
스크립트 시간을 측정하려면 다음을 cleanup.sh
사용하세요.
$ time cleanup.sh
답변3
나는 이것이 오래된 질문이라는 것을 알고 있지만 실행하는 데 시간이 얼마나 걸리는지 알고 싶거나 알고 싶을 때 모든 작업을 수행하는 방법입니다.
Bash에는 내부 변수라는 이름의 두 번째 타이머가 내장되어 있습니다 SECONDS
(참조:여기다른 내부 변수의 경우)
SECONDS=0
실행 시간을 확인하고 싶은 것 보다 먼저 . 좋은 결과를 얻으려면 사용자 입력 뒤에 와야 하므로 정보를 요청하는 경우 프롬프트 뒤에 입력하세요.
그런 다음 확인하려는 내용의 끝에 다음을 입력하세요.
if (( $SECONDS > 3600 )) ; then
let "hours=SECONDS/3600"
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
elif (( $SECONDS > 60 )) ; then
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $minutes minute(s) and $seconds second(s)"
else
echo "Completed in $SECONDS seconds"
fi
시간을 초 단위로 알고 싶다면 위의 내용을 다음과 같이 단순화할 수 있습니다.
echo "Completed in $SECONDS seconds"
예를 들어:
read -rp "What's your name? " "name"
SECONDS=0
echo "Hello, $name"
if (( $SECONDS > 3600 )) ; then
let "hours=SECONDS/3600"
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
elif (( $SECONDS > 60 )) ; then
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $minutes minute(s) and $seconds second(s)"
else
echo "Completed in $SECONDS seconds"
fi
답변4
$SECONDS
@anask는 이 답변에 대해 영리한 솔루션을 제공했습니다. 단, 새 답변을 만드는 대신 네이티브를 사용하는 것이 좋습니다.
awk -v t=$SECONDS 'BEGIN{t=int(t*1000); printf "Elapsed Time (HH:MM:SS): %d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'
및 나누기의 목적은 printf
경과된 초를 각각 해당 단위인 시, 분, 초로 변환하는 것입니다.