쉘 스크립트에서 기간을 초 단위로 측정하려면 어떻게합니까?
Linux 셸 스크립트에서 작업에 걸리는 시간을 알고 싶습니다. 어떻게 할 수 있습니까?
다른 사람들이 제안한 것처럼 time 명령을 사용하는 것이 좋습니다.
또 다른 옵션은 스크립트 실행이 시작된 이후의 시간 (초)을 포함하는 매직 내장 변수 $ SECONDS를 사용하는 것입니다. 다음과 같이 말할 수 있습니다.
START_TIME=$SECONDS
dosomething
ELAPSED_TIME=$(($SECONDS - $START_TIME))
나는 이것이 bash 특정이라고 생각하지만 Linux를 사용하고 있으므로 bash를 사용하고 있다고 가정합니다.
time명령을 사용하십시오 . time ls /bin.
다음 예를 시도하십시오.
START_TIME=$SECONDS
# do something
sleep 65
ELAPSED_TIME=$(($SECONDS - $START_TIME))
echo "$(($ELAPSED_TIME/60)) min $(($ELAPSED_TIME%60)) sec"
#> 1 min 5 sec
많은 답변이 언급 $SECONDS하고 있지만 그 변수는 실제로 그들이 생각하는 것보다 훨씬 낫습니다 .
이 변수에 할당하면 카운트가 할당 된 값으로 재설정되고 확장 된 값은 할당 된 값에 할당 이후의 시간 (초)을 더한 값이됩니다.
즉, 스크립트 끝에서이 변수를 직접 쿼리하여 경과 시간을 인쇄 할 수 있습니다.
#!/usr/bin/env bash
# Do stuff...
echo "Script finished in $SECONDS seconds."
다음과 같이 더 작은 섹션의 시간을 지정할 수도 있습니다.
#!/usr/bin/env bash
# Do stuff
SECONDS=0
# Do timed stuff...
echo "Timed stuff finished in $SECONDS seconds."
다음은 밀리 초 단위로 경과 된 시간을 찾는 스크립트입니다. sleep 60 줄을 실행하려는 코드로 바꿉니다.
a=0
while [ $a -lt 10 ]
do
START_TIME=`echo $(($(date +%s%N)/1000000))`
sleep 3
END_TIME=`echo $(($(date +%s%N)/1000000))`
ELAPSED_TIME=$(($END_TIME - $START_TIME))
echo $ELAPSED_TIME
if [ $a -eq 10 ]
then
break
fi
a=`expr $a + 1`
done
나와 같은 오류가 발생한 사람을 돕기 위해 :
arithmetic expression: expecting primary: "-"
다음으로 시작하는 쉘 스크립트를 확인하십시오.
#!/bin/bash
건배!
암소 비슷한 일종의 영양 time
나는 또한 GNU time명령 ( https://www.gnu.org/software/time/) 이 매우 재미 있습니다. 이것은 timeBash 내장에 비해 몇 가지 중요한 옵션을 제공합니다 .
샘플 사용법 :
env time --format '%e' --output time.log sleep 1
산출:
1.00
설명:
env:/usr/bin/time내장 된 Bash 대신 찾기--format '%e': 인쇄 시간 (초),을 참조하십시오man time.이것이 내가 벤치마킹 할 때 종종 원하는 것입니다. 분 + 초가 아닌 단일 숫자입니다.
그리고 제가 자주 사용하는 중요한 패턴은 다음과 같습니다.
bench-cmd() (
logfile=time.log
echo "cmd $@" >> "$logfile"
printf 'time ' >> "$logfile"
bench_cmd="env time --append --format '%e' --output '$logfile' $@"
eval "$bench_cmd"
echo >> "$logfile"
)
rm -f time.log
bench-cmd sleep 1
bench-cmd sleep 2
bench-cmd sleep 3
cat time.log
Output:
cmd sleep 1
time 1.00
cmd sleep 2
time 2.00
cmd sleep 3
time 3.00
Explanation:
--output: output the time to a file.By default, the output goes to stderr, so this option is important to separate the timing from the stderr of the command.
--append: append to the file instead of overwriting.This allows me to concentrate the entire benchmark output in a single file.
참고URL : https://stackoverflow.com/questions/5152858/how-do-i-measure-duration-in-seconds-in-a-shell-script
'program story' 카테고리의 다른 글
| 날짜가 yyyy-dd-MM 형식 인 DateTime.TryParse 문제 (0) | 2020.10.31 |
|---|---|
| Elasticsearch 2.0에서 원격 액세스 / 요청을 활성화하려면 어떻게해야합니까? (0) | 2020.10.31 |
| 내 ASP.NET Web API ActionFilterAttribute OnActionExecuting이 실행되지 않는 이유는 무엇입니까? (0) | 2020.10.31 |
| 물리 디스크를 나열하는 방법은 무엇입니까? (0) | 2020.10.31 |
| 이 캐스트가 중복되는 이유는 무엇입니까? (0) | 2020.10.30 |