bash内置变量SECONDS

Bash 的 SECONDS 是一个由 Bash 自己维护的计时器变量,不是直接读取系统当前秒数。

获取当前bash启动/重置经过秒数

1
echo "$SECONDS"

它表示:从当前 Bash shell 启动/重置 SECONDS 变量以来经过的秒数

如:

1
2
3
4
5
echo "$SECONDS"   # 0

sleep 3

echo "$SECONDS" # 3

可以手动重置:

1
SECONDS=0

然后:

1
2
sleep 10
echo "$SECONDS" # 10

计时器

脚本开始执行后运行 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

# 如果已经超过1分钟,退出内层循环
(( 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分钟,退出"