【问题标题】:How to translate seconds to minutes & seconds in Bash?如何在 Bash 中将秒转换为分和秒?
【发布时间】:2017-06-28 04:57:23
【问题描述】:

我有一个 Bash 脚本,它通过它的 API 从网站下载文件,我想在最后实现一个东西(因为缺少更好的词),以显示脚本完成所需的时间。有了这段代码,我就能做到:

#!/bin/bash
SECONDS=0

# -- Code to Execute --

echo "Task complete"
echo "Script completed in $(echo "scale=2; $SECONDS / 60" | bc) minutes"

但是,这会以不到一分钟的时间显示脚本执行所用的时间:

Task complete
Script completed in 1.35 minutes

如何将脚本完成所需的秒数转换为分钟和秒?像这样:

Task complete
Script completed in 1 minute and 12 seconds

【问题讨论】:

  • 我希望它只显示一个数值,表示脚本在几分钟和几秒钟内完成的时间量,就像 codeforester 的回答所做的那样。 (例如,将 72 秒转换为 1 分 12 秒)

标签: linux bash math time


【解决方案1】:

Bash 擅长简单的整数数学:

total_time=100
minutes=$((total_time / 60))
seconds=$((total_time % 60))
echo "Script completed in $minutes minutes and $seconds seconds"
# output -> Script completed in 1 minutes and 40 seconds

【讨论】:

    【解决方案2】:

    您可以在 shell 中使用整数除法和取模运算符:

    echo "Script completed in $((SECONDS/60)) minutes and $((SECONDS%60)) seconds"
    

    如果你想省略秒和分钟部分,如果它们是零,那就有点复杂了:

    if (( SECONDS/60 == 0 )); then
                echo "Script completed in $SECONDS seconds"
    elif (( SECONDS%60 == 0 )); then
        echo "Script completed in $((SECONDS/60)) minutes"
    else
        echo "Script completed in $((SECONDS/60)) minutes and $((SECONDS%60)) seconds"
    fi
    

    (它仍然会说“1 分钟”而不是“1 分钟”;如果你想让它变得更复杂,你也可以修复它......)

    【讨论】:

    • 您的回答也可以,但由于它有点超出我的需要,我继续接受了 codeforester 的回答。不过还是谢谢你的回答!
    【解决方案3】:

    在一行中直接通过awk

    echo $(seconds) | awk '{printf "%d:%02d:%02d", $1/3600, ($1/60)%60, $1%60}'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-01
      • 2011-01-26
      • 2013-07-11
      • 1970-01-01
      • 2014-10-01
      相关资源
      最近更新 更多