bigben446 2022-09-28 22:39 采纳率: 85.7%
浏览 88
已结题

shell脚本将秒转换为小时分钟秒

有一个shell脚本,可以获得shell脚本运行的时间,但是以秒显示的,比如70s,而不是1分钟10秒,想要以后一种形式显示,该如何做?

#!/usr/bin/bash

#统计shell运行时间,date相减

startTime=`date +%Y%m%d-%H:%M:%S`
startTime_s=`date +%s`

#运行的程序
sleep 70s
#sleep 10m

endTime=`date +%Y%m%d-%H:%M:%S`
endTime_s=`date +%s`

sumTime=$[ $endTime_s - $startTime_s ]

echo "$startTime ---> $endTime" "Total:$sumTime seconds"

###以下代码不对,如何修改
h=$($sumTime/3600)
$m=$sumTime/60
$s=$sumTime%60
echo "总计:" h "小时" m "分钟" s "秒"

  • 写回答

3条回答 默认 最新

  • 游一游走一走 2022-09-29 07:11
    关注
    1. 不用函数,简单点的,但是可能有0输出
      seconds=601
      dateF=`eval "echo $(date -ud "@$seconds" +'$((%s/3600/24)) 天 %H 小时 %M 分 %S 秒')"`
      echo $dateF
      
    2. 使用函数
    #!/bin/bash
    displaytime() {
      local T=$1
      local D=$((T/60/60/24))
      local H=$((T/60/60%24))
      local M=$((T/60%60))
      local S=$((T%60))
      (( $D > 0 )) && printf '%d 天 ' $D
      (( $H > 0 )) && printf '%d 小时 ' $H
      (( $M > 0 )) && printf '%d 分 ' $M
      printf '%d 秒\n' $S
    }
    
    displaytime 601
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • CSDN专家-Time 2022-09-28 22:51
    关注

    你可以用format直接转化成秒啊

    ans="0s"
    swap_seconds ()
    {
            SEC=$1
            if [ $SEC -lt 60 ]; then
               ans="${SEC}s"        elif [ $SEC -ge 60 ] && [ $SEC -lt 3600 ];then
               ans="$(( SEC / 60 ))m$(( SEC % 60 ))s"
            elif [ $SEC -ge 3600 ]; then
               ans="$(( SEC / 3600 ))h$(( (SEC % 3600) / 60 ))m$(( (SEC % 3600) % 60 ))s"
            fi
    }
    swap_seconds 100
    echo $ans
    
    评论 编辑记录
  • 凯歌响起 2022-09-28 23:05
    关注
    
    #!/usr/bin/bash
    #统计shell运行时间,date相减
     
    startTime=`date +%Y%m%d-%H:%M:%S`
    startTime_s=`date +%s`
     
    #运行的程序
    sleep 3s
    #sleep 10m
     
    endTime=`date +%Y%m%d-%H:%M:%S`
    endTime_s=`date +%s`
     
    sumTime=$[ $endTime_s - $startTime_s ]
     
    echo "$startTime ---> $endTime" "Total:$sumTime seconds"
     
    ###以下代码不对,如何修改
    h="$sumTime/3600" | bc
    m="$sumTime/60" | bc
    s=$sumTime
    
    if [ -z "$h" ];then
      if [ -z "$m" ];then
         echo "总计:$s秒"
      else
         echo "总计:$m$s秒"
      fi
    else
      echo "总计:$h$m$s秒"
    fi
    
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月7日
  • 已采纳回答 9月29日
  • 创建了问题 9月28日

悬赏问题

  • ¥15 二分类改为多分类问题
  • ¥15 Unity微信小游戏上调用ReadPixels()方法报错
  • ¥15 如何通过求后验分布求得样本中属于两种物种其中一种的概率?
  • ¥15 q从常量变成sin函数,怎么改写python代码?
  • ¥15 图论编程问题,有可以指导的吗
  • ¥15 DEA的CCR模型画图
  • ¥15 请假各位一个关于安卓车机的问题
  • ¥15 光谱仪怎么看这样的透射谱
  • ¥15 pyqt5 如何实现输入框输入关键词,下拉框显示模糊查询返回的结果?
  • ¥20 fluent模拟,可以燃烧和相变同时模拟吗?