저는 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 ""
}