나는 내 명령을 실행하기 위해 bash 스크립트 작성 경과 시간을 계산하기 위해 고려할 사항은 다음과 같습니다.
STARTTIME=$(date +%s)
#command block that takes time to complete...
#........
ENDTIME=$(date +%s)
echo "It takes $($ENDTIME - $STARTTIME) seconds to complete this task..."
그러나 내가 열심히 한 논리가 수정하십시오 다니엘을 다음 인쇄됩니다.
이 몇 초에서 " 설정이므로 완료하십시오 task.".
내가 사용하는 모든 잘못된 구체화하십시오 평가?
I believe I would love 유형이 지정되지 않은 변수로, 배시 변수가 있을 경우, 문자열을 " integer". 메서드입니다 bash 패하였다.
'$ $ []' 또는 '또는' () 는 산술 연산 작업을 위해 일하고 결과입니다. # 39$ () '을 사용하여, re you& 단순히' 등의 구체화하십시오 · 평가하고 이를 함장님이요 # 39 의 it& 조금 미묘한 차이를. ᄋ "이번 도움이 됩니다.
이 질문에 대한 의견, [] 로 나와 팅크 abc. '$ $ (())' 와 ',' 는 사용되지 한다고 합니다.
시도할 수 있는 '끝 시간' 으로 명령을 실행합니다. '1370306857) 과 같은 오류가 발생하는 지켜보리니 할 수도 있습니다. '명령을 찾을 수 없습니다. 대신 list. [산술 개확장] [1]:
echo "It takes $(($ENDTIME - $STARTTIME)) seconds to complete this task..."
또한, 'commands.sh', 그리고 스크립트입니다 저장할 수 있는 별도의 명령 사용 시간이 명령:
time commands.sh
[1]: http://tiswww.case.edu/php/chet/bash/bashref.html # SEC34
TIMEFORMAT='It takes %R seconds to complete this task...'
time {
#command block that takes time to complete...
#........
}
>. 이 값은 파라메트가 사용되고 있는 '시간' 에 대한 정보를 시간이 얼마나 접두어로 파이프라인을 specifying 포맷 스트링 >. 예약어입니다 표시되어야 합니다. 이 "'%" 문자를 cxp 오버클로킹된 >. 이스케이프 시퀀스 즉 확장됨 시간 값으로 또는 기타 정보를. >. 이스케이프 시퀀스 및 그 의미는 다음과 같습니다. 괄호는 >. 나타내는 옵션임 구간들을. >. >. %%이 (가) >. >. 예를 들어 "% '. >. % [p] [l] R >. >. 경과 시간 (초). >. % [p] [l] U >. >. 이 CPU 수 초가 소요된 사용자 모드. >. % [p] [l] S >. >. 이 CPU 수 초가 소요된 시스템 모드. >. %P >. >. Cpu 비율, 계산됩니까 as (%U + %S) / %r). >. >. P (옵션) 는 분수 자리 수를 소수점 숫자 specifying precision, 이후. 값이 0 이 없습니다. >. 소수점 또는 분수 스크램블된 출력입니다. 이후 최대 3 곳에 >. 소수점 지정할 수 있습니다. 3 은 보다 큰 값을 p 변경일 >. 3. 지정되지 않은 경우 p 값 3 을 사용하고 있다. >. >. 옵션 'l' 은 더 형식, 분, 양식 등 가치를 MMmSS.FFs. p 여부를 결정합니다. >. 분수 포함돼 있다. >. >. 만약 이 값이 설정되어 있지 않은 것처럼, Bash) 는 변수 >. >. $ # 39, & # 39 \nreal\t% 3lr\nuser\t% 3lu\nsys\t% 3ls&. >. 값이 null, 아니 시간 정보가 표시됩니다. 줄 바꿈 후행 때 추가되는 형식 문자열 표시됩니다.
종료기 다음 코드:
start=$(date +'%s') && sleep 5 && echo "It took $(($(date +'%s') - $start)) seconds"
함께 시간을 사용하는 시도하시겠습니까 경과된 초 옵션:
/ usr / bin / 시간 - 1 ' (sleep)' 에서 f%e 내주었다.
잠을 1 '또는' \time f%e 대화형 내주었다.
남은 시간을 볼 맨페이지:
>. 사용자는 배시 셸을 위해 사용해야 할 명시적인 경로를 실행하십시오 외부 시간이 아니라 내장 명령 쉘로 변형. 시스템에 여기서 시간은 설치된 첫 번째 예 / usr / bin, 됩니다 wc /etc/hosts /usr/bin/time
및
FORMATTING THE OUTPUT
...
% A literal '%'.
e Elapsed real (wall clock) time used by the process, in
seconds.
숫자가 클수록 우리는 보다 쉽게 읽을 수 있는 인쇄하려면 대한 형식. 아래 예제는 같은 다른 뿐만 아니라, 인쇄, human" " 에서 않습니다. 형식:
secs_to_human() {
if [[ -z ${1} || ${1} -lt 60 ]] ;then
min=0 ; secs="${1}"
else
time_mins=$(echo "scale=2; ${1}/60" | bc)
min=$(echo ${time_mins} | cut -d'.' -f1)
secs="0.$(echo ${time_mins} | cut -d'.' -f2)"
secs=$(echo ${secs}*60|bc|awk '{print int($1+0.5)}')
fi
echo "Time Elapsed : ${min} minutes and ${secs} seconds."
}
단순한 테스트:
secs_to_human "300"
secs_to_human "305"
secs_to_human "59"
secs_to_human "60"
secs_to_human "660"
secs_to_human "3000"
출력:
Time Elapsed : 5 minutes and 0 seconds.
Time Elapsed : 5 minutes and 5 seconds.
Time Elapsed : 0 minutes and 59 seconds.
Time Elapsed : 1 minutes and 0 seconds.
Time Elapsed : 11 minutes and 0 seconds.
Time Elapsed : 50 minutes and 0 seconds.
스크립트를 사용할 수 있는 다른 설명에 따라 포스트 (캡처하기 어졌다면 security. 기능이 시작점 마무리 시간:
start=$(date +%s)
# << performs some task here >>
secs_to_human "$(($(date +%s) - ${start}))"
start=$(date +%Y%m%d%H%M%S);
for x in {1..5};
do echo $x;
sleep 1; done;
end=$(date +%Y%m%d%H%M%S);
elapsed=$(($end-$start));
ftime=$(for((i=1;i<=$((${#end}-${#elapsed}));i++));
do echo -n "-";
done;
echo ${elapsed});
echo -e "Start : ${start}\nStop : ${end}\nElapsed: ${ftime}"
Start : 20171108005304
Stop : 20171108005310
Elapsed: -------------6
#!/bin/bash
time_elapsed(){
appstop=$1; appstart=$2
ss_strt=${appstart:12:2} ;ss_stop=${appstop:12:2}
mm_strt=${appstart:10:2} ;mm_stop=${appstop:10:2}
hh_strt=${appstart:8:2} ; hh_stop=${appstop:8:2}
dd_strt=${appstart:6:2} ; dd_stop=${appstop:6:2}
mh_strt=${appstart:4:2} ; mh_stop=${appstop:4:2}
yy_strt=${appstart:0:4} ; yy_stop=${appstop:0:4}
if [ "${ss_stop}" -lt "${ss_strt}" ]; then ss_stop=$((ss_stop+60)); mm_stop=$((mm_stop-1)); fi
if [ "${mm_stop}" -lt "0" ]; then mm_stop=$((mm_stop+60)); hh_stop=$((hh_stop-1)); fi
if [ "${mm_stop}" -lt "${mm_strt}" ]; then mm_stop=$((mm_stop+60)); hh_stop=$((hh_stop-1)); fi
if [ "${hh_stop}" -lt "0" ]; then hh_stop=$((hh_stop+24)); dd_stop=$((dd_stop-1)); fi
if [ "${hh_stop}" -lt "${hh_strt}" ]; then hh_stop=$((hh_stop+24)); dd_stop=$((dd_stop-1)); fi
if [ "${dd_stop}" -lt "0" ]; then dd_stop=$((dd_stop+$(mh_days $mh_stop $yy_stop))); mh_stop=$((mh_stop-1)); fi
if [ "${dd_stop}" -lt "${dd_strt}" ]; then dd_stop=$((dd_stop+$(mh_days $mh_stop $yy_stop))); mh_stop=$((mh_stop-1)); fi
if [ "${mh_stop}" -lt "0" ]; then mh_stop=$((mh_stop+12)); yy_stop=$((yy_stop-1)); fi
if [ "${mh_stop}" -lt "${mh_strt}" ]; then mh_stop=$((mh_stop+12)); yy_stop=$((yy_stop-1)); fi
ss_espd=$((10#${ss_stop}-10#${ss_strt})); if [ "${#ss_espd}" -le "1" ]; then ss_espd=$(for((i=1;i<=$((${#ss_stop}-${#ss_espd}));i++)); do echo -n "0"; done; echo ${ss_espd}); fi
mm_espd=$((10#${mm_stop}-10#${mm_strt})); if [ "${#mm_espd}" -le "1" ]; then mm_espd=$(for((i=1;i<=$((${#mm_stop}-${#mm_espd}));i++)); do echo -n "0"; done; echo ${mm_espd}); fi
hh_espd=$((10#${hh_stop}-10#${hh_strt})); if [ "${#hh_espd}" -le "1" ]; then hh_espd=$(for((i=1;i<=$((${#hh_stop}-${#hh_espd}));i++)); do echo -n "0"; done; echo ${hh_espd}); fi
dd_espd=$((10#${dd_stop}-10#${dd_strt})); if [ "${#dd_espd}" -le "1" ]; then dd_espd=$(for((i=1;i<=$((${#dd_stop}-${#dd_espd}));i++)); do echo -n "0"; done; echo ${dd_espd}); fi
mh_espd=$((10#${mh_stop}-10#${mh_strt})); if [ "${#mh_espd}" -le "1" ]; then mh_espd=$(for((i=1;i<=$((${#mh_stop}-${#mh_espd}));i++)); do echo -n "0"; done; echo ${mh_espd}); fi
yy_espd=$((10#${yy_stop}-10#${yy_strt})); if [ "${#yy_espd}" -le "1" ]; then yy_espd=$(for((i=1;i<=$((${#yy_stop}-${#yy_espd}));i++)); do echo -n "0"; done; echo ${yy_espd}); fi
echo -e "${yy_espd}-${mh_espd}-${dd_espd} ${hh_espd}:${mm_espd}:${ss_espd}"
#return $(echo -e "${yy_espd}-${mh_espd}-${dd_espd} ${hh_espd}:${mm_espd}:${ss_espd}")
}
mh_days(){
mh_stop=$1; yy_stop=$2; #also checks if it's leap year or not
case $mh_stop in
[1,3,5,7,8,10,12]) mh_stop=31
;;
2) (( !(yy_stop % 4) && (yy_stop % 100 || !(yy_stop % 400) ) )) && mh_stop=29 || mh_stop=28
;;
[4,6,9,11]) mh_stop=30
;;
esac
return ${mh_stop}
}
appstart=$(date +%Y%m%d%H%M%S); read -p "Wait some time, then press nay-key..." key; appstop=$(date +%Y%m%d%H%M%S); elapsed=$(time_elapsed $appstop $appstart); echo -e "Start...: ${appstart:0:4}-${appstart:4:2}-${appstart:6:2} ${appstart:8:2}:${appstart:10:2}:${appstart:12:2}\nStop....: ${appstop:0:4}-${appstop:4:2}-${appstop:6:2} ${appstop:8:2}:${appstop:10:2}:${appstop:12:2}\n$(printf '%0.1s' "="{1..30})\nElapsed.: ${elapsed}"
exit 0
-------------------------------------------- return
Wait some time, then press nay-key...
Start...: 2017-11-09 03:22:17
Stop....: 2017-11-09 03:22:18
==============================
Elapsed.: 0000-00-00 00:00:01