Bash 的 SECONDS 是一个由 Bash 自己维护的计时器变量,不是直接读取系统当前秒数。
获取当前bash启动/重置经过秒数
它表示:从当前 Bash shell 启动/重置 SECONDS 变量以来经过的秒数。
如:
1 2 3 4 5
| echo "$SECONDS"
sleep 3
echo "$SECONDS"
|
可以手动重置:
然后:
1 2
| sleep 10 echo "$SECONDS"
|
计时器
脚本开始执行后运行 60 秒
1 2 3 4 5
| SECONDS=0
while (( SECONDS < 60 )); do ... done
|
是合适的。
它的本质相当于:
1 2 3 4 5 6 7 8 9
| 脚本计时器 SECONDS=0 ↓ 经过 1 秒 → 1 经过 2 秒 → 2 ... 经过 60 秒 → 60 ↓ 退出 while
|
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| SECONDS=0
while (( SECONDS < 60 )); do
for URL in "${URLS[@]}"; do
(( SECONDS >= 60 )) && break
START=$(date +%s%3N)
HTTP_CODE=$(curl -s \ --connect-timeout 1 \ --max-time 5 \ -o /dev/null \ -w "%{http_code}" \ --request POST "$URL" \ --header 'Content-Type: application/json' \ --data "$DATA")
END=$(date +%s%3N)
COST=$((END - START))
echo "$(date '+%Y-%m-%d %H:%M:%S') $URL HTTP=$HTTP_CODE RT=${COST}ms"
sleep 0.2
done
done
echo "执行满1分钟,退出"
|