私は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 ""
}