함수당 Bash 스크립트 시간 및 총 스크립트 실행 기간

함수당 Bash 스크립트 시간 및 총 스크립트 실행 기간

저는 bash 스크립트를 작성했으며 스크립트 실행 기간의 총 시간과 각 루프 반복에 소요되는 시간을 가져오는 타이머를 구현하고 싶습니다. 예를 들어, 사용자가 -t 플래그를 사용하여 1개의 대상에서만 실행하는 대신 파일의 모든 IP 주소에서 스크립트를 실행하는 -f 플래그를 지정한 경우 모든 IP 주소에서 스크립트를 반환하도록 타이머를 어떻게 재설정합니까? IP 스캔 시간 및 모든 IP 스캔에 대한 총 시간 반환? 이것은 내 현재 타이머 기능입니다

#!/bin/bash

NICE='\e[1;32;92m[+]\e[0m'
TEAL='\e[96m'
END='\e[0m'
SECONDS=0

timer() {

    echo -e "${TEAL}~~~~~~~~~~~~~~~~~~~~~~~ All Scans for Completed ~~~~~~~~~~~~~~~~~~~~~~~${END}"
    echo ""

    if (($SECONDS > 3600)); then
        hours=SECONDS/3600
        let "minutes=(SECONDS%3600)/60"
        let "seconds=(SECONDS%3600)%60"
        echo -e "${NICE} Scans 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 -e "${NICE} Scans Completed in $minutes minute(s) and $seconds second(s)"
    else
        echo -e "${NICE} Scans Completed in $SECONDS seconds"
    fi
    echo -e ""
}

SECONDS를 0으로 재설정하는 ResetTimer 함수를 만들었습니다.

resetTimer() {
    SECONDS=0
}

이것은 각 스캔에 대한 개별 시간을 표시하므로 거의 작동하지만 SECONDS를 0으로 재설정했기 때문에 재설정 기능을 사용할 경우 모든 스캔에 대한 총 시간을 얻는 방법을 잘 모르겠습니다. 아마도 매우 간단한 해결책이 있을 것이라고 확신하지만, 그것을 찾거나 올바르게 수행하는 방법을 알아낼 수 없었습니다.

다음은 파일에서 IP를 루핑할 때 스크립트의 나머지 부분 흐름에 대한 매우 단순화된 의사코드입니다.

totalTimeFunction() {
        ## ToDo: Create Total Time function that keeps track of original Starting SECONDS
        }

for target in $target_list; do
    # do stuff
    timer
    resetTimer
done
totalTimeFunction

답변1

다시 한 번 감사드립니다. 나는 이제 일을 시작합니다. 이것은 작업 타이머 기능입니다.

timer() {

    echo -e "${TEAL}~~~~~~~~~~~~~~~~~~~~~~~ Scanning for $rhost Completed ~~~~~~~~~~~~~~~~~~~~~~~${END}"
    echo ""

    duration=$((duration + SECONDS))
    if (($SECONDS > 3600)) || (($duration > 3600)); then
        hours=SECONDS/3600
        totalhours=$duration/3600
        let "minutes=(SECONDS%3600)/60"
        let "seconds=(SECONDS%3600)%60"
        echo -e "${NICE} Scans Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
        let "totalminutes=($duration%3600)/60"
        let "totalseconds=($duration%3600)%60"
        echo -e "${NICE} Scans Completed in $totalhours hour(s), $totalminutes minute(s) and $totalseconds second(s)"
    elif (($SECONDS > 60)) || (($duration > 60)); then
        let "minutes=(SECONDS%3600)/60"
        let "seconds=(SECONDS%3600)%60"
        echo -e "${NICE} This Scan Completed in $minutes minute(s) and $seconds second(s)"
        let "totalminutes=($duration%3600)/60"
        let "totalseconds=($duration%3600)%60"
        echo -e "${NICE} All Scans Completed in $totalminutes minute(s) and $totalseconds second(s)"
    else
        echo -e "${NICE} This Scan Completed in $SECONDS seconds"
        echo -e "${NICE} All Scans Completed in $duration seconds"
    fi
    echo -e ""
}

관련 정보