最直接可靠的方式是使用内置变量 seconds,它在脚本启动时自动初始化为 0 并持续累加秒数;需用 date 命令记录完整起始时间戳,推荐 start_time=$(date +"%y-%m-%d %h:%m:%s")。

Linux Shell 中记录脚本起始时间,最直接可靠的方式是使用内置变量 SECONDS,它在脚本启动时自动初始化为 0,并随脚本运行持续累加秒数。
用 SECONDS 获取运行时长
SECONDS 是 Bash 内置的只读整数变量,无需手动赋值。脚本开始执行后,它就从 0 开始计时(单位:秒)。任意时刻引用 $SECONDS,得到的就是从脚本启动到当前所经过的秒数。
- 脚本开头无需初始化,Bash 自动设置
SECONDS=0 - 可在任意位置读取:
echo "已运行 $SECONDS 秒" - 也可用于控制循环或超时判断,例如:
while [ $SECONDS -lt 10 ]; do ...; done
用 date 命令记录精确起始时间戳
若需带日期、时分秒的完整时间点(如 “2026-09-17 00:02:15”),应在脚本开头立即调用 date 并保存结果:
- 推荐写法:
START_TIME=$(date +"%Y-%m-%d %H:%M:%S") - 后续可输出:
echo "脚本始于 $START_TIME" - 注意:不要用反引号(
`)而用$(),更清晰安全
结合两者获取更完整信息
实际脚本中常同时使用两种方式:用 date 记录起始时刻,用 SECONDS 统计耗时,最后一起输出:
START_TIME=$(date +"%Y-%m-%d %H:%M:%S")# ... 主体逻辑(如循环、命令调用等)...echo "开始时间:$START_TIME"echo "总耗时:${SECONDS} 秒"
避免常见误区
不要依赖 $SECONDS 的初始值做条件判断(比如 if [ $SECONDS -eq 0 ]),因为 Bash 启动解析阶段已有微小延迟;也不要在子 shell 中修改它——SECONDS 在子 shell 中独立计时,不影响父脚本。











