関数ごとの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をゼロにリセットしたので、リセット機能を使用すると、すべてのスキャンの合計時間を取得する方法がわかりません。おそらく非常に簡単な解決策があると確信していますが、それを見つけるか正しく実行する方法を見つけることができませんでした。

以下は、ファイルから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 ""
}

関連情報