统计 shell 脚本运行时间,支持 MacOS 与 Linux 系统。

starttime=$(date +'%Y-%m-%d %H:%M:%S')
sleep 5
endtime=$(date +'%Y-%m-%d %H:%M:%S')
if [[ $(uname -a) =~ "Darwin" ]]; then
    start_seconds=$(date -j -f "%Y-%m-%d %H:%M:%S" "$starttime" +%s)
    end_seconds=$(date -j -f "%Y-%m-%d %H:%M:%S" "$endtime" +%s)
else
    start_seconds=$(date -d "$starttime" +%s)
    end_seconds=$(date -d "$endtime" +%s)
fi
echo 开始时间:"$starttime"
echo 结束时间:"$endtime"
echo "本次运行时间:$((end_seconds - start_seconds)) s"
#!/bin/bash
# -*- coding: utf-8 -*-
# @Time         : 2021/8/7 13:10
# @Description  : 计算脚本运行时间

# 获取脚本开始时间
start_time=$(date +'%Y-%m-%d %H:%M:%S')

# 模拟脚本运行
sleep 5

# 获取脚本结束时间
end_time=$(date +'%Y-%m-%d %H:%M:%S')

# 判断操作系统类型,选择不同的时间转换命令
if [[ $(uname -a) =~ "Darwin" ]]; then
    # macOS系统使用date命令的-j选项进行时间转换
    start_seconds=$(date -j -f "%Y-%m-%d %H:%M:%S" "$start_time" +%s)
    end_seconds=$(date -j -f "%Y-%m-%d %H:%M:%S" "$end_time" +%s)
else
    # Linux系统使用date命令的-d选项进行时间转换
    start_seconds=$(date -d "$start_time" +%s)
    end_seconds=$(date -d "$end_time" +%s)
fi

# 输出脚本开始和结束时间,以及运行时间
echo "开始时间:$start_time"
echo "结束时间:$end_time"
echo "本次运行时间:$((end_seconds - start_seconds)) s"

注释如下:

  • 第1行:指定脚本解释器为bash。
  • 第2-4行:添加脚本的元信息,包括脚本名称、作者、版本等信息。
  • 第7行:获取脚本开始时间,并使用date命令的格式化选项将时间格式化为"YYYY-MM-DD HH:MM:SS"的形式。
  • 第10行:使用sleep命令模拟脚本的运行,这里设置为5秒。
  • 第13行:获取脚本结束时间,并使用date命令的格式化选项将时间格式化为"YYYY-MM-DD HH:MM:SS"的形式。
  • 第16-24行:判断操作系统类型,选择不同的时间转换命令。macOS系统使用date命令的-j选项进行时间转换,Linux系统使用date命令的-d选项进行时间转换。
  • 第27-29行:输出脚本开始和结束时间,以及本次运行时间。其中,运行时间通过结束时间和开始时间的时间戳相减得出。