【问题标题】:time part of a script (running time)脚本的时间部分(运行时间)
【发布时间】:2020-12-17 21:18:19
【问题描述】:

使用time script.sh,您将获得运行脚本所需的时间,但是如果您想为脚本的一部分计时?

假设我想测试一个循环需要多长时间,我可以使用 $SECONDS 函数,但是是否有任何以毫秒计的计时器?

例如在长代码中间:

    timerstart
    until [[ $loop -eq 10000 ]]; do
     ((++loop))

    echo "annoying"
    done
    timerstop

然后在脚本的最后,我只添加了 echo $timerresult ,它会显示只运行所选代码所花费的毫秒数,而不是脚本的其余部分

我正在寻找这个解决方案,这样我就可以测试部分脚本的“缓慢性”.. 这个可以解决吗?

【问题讨论】:

    标签: linux bash time milliseconds seconds


    【解决方案1】:

    对于 Bash 5.0 及更高版本,您可以使用$EPOCHREALTIME

    [...] 它扩展为自 Unix 纪元以来的秒数,作为具有微秒粒度的浮点值 [...]

    start=$EPOCHREALTIME
    for ((i = 0; i < 10000; ++i)); do
        echo "annoying"
    done
    stop=$EPOCHREALTIME
    
    elapsed=$(bc -l <<< "$stop - $start")
    

    【讨论】:

    • 有很多很好的建议,但我认为你的建议最适合我的需要,因为这样你可以在一个脚本中计时几个函数(有几个开始/结束点并在之后设置结果,所以通过植入你的想法并以time script.sh 开始脚本我会得到一个完整的时间和不同循环和东西的时间!
    【解决方案2】:

    你可以使用

    date '+%s.%N'
    

    以纳秒精度获取当前时间。

    #!/bin/bash
    start=$(date '+%s.%N')
    until [[ $loop -eq 10000 ]]; do
        ((++loop))
        
        echo "annoying"
    done
    stop=$(date '+%s.%N')
    bc <<< $stop-$start
    

    【讨论】:

      【解决方案3】:

      您也可以在脚本中为各个部分使用time,例如为循环计时:

      time until [[ $loop -eq 10000 ]]; do
       ((++loop))
      
       echo "annoying"
      done
      

      或者用大括号对一组命令进行计时:

      time {
       until [[ $loop -eq 10000 ]]; do
        ((++loop))
       done
      
       echo "Other commands here that are also timed"
      }
      

      【讨论】:

        【解决方案4】:

        将循环放入函数中。

        #!/bin/bash
        myloop() {
            loop=1
            until [[ $loop -eq 10000 ]]; do
               ((++loop))
               echo "annoying"
            done
        }
        
        time myloop
        

        【讨论】:

          猜你喜欢
          • 2019-02-12
          • 1970-01-01
          • 2018-07-20
          • 2012-10-30
          • 2018-07-02
          • 1970-01-01
          • 1970-01-01
          • 2014-05-15
          • 1970-01-01
          相关资源
          最近更新 更多