linux shell脚本100,Bash Shell脚本可进行100次迭代并消耗日志时间

如何使用bash shell脚本运行100次迭代? 我想知道执行一个命令需要多长时间(开始和结束时间)。 我想跟踪当前正在运行的迭代。 我想记录每个迭代。 我有一个自动化脚本,需要运行和记录它。

for i in 1 2 3

do

command1

done

但是我想知道完成一次迭代需要多长时间-并将信息也写入日志文件!

另请参阅stackoverflow.com/questions/3737740/

您也可以在迭代中使用seq:

for i in `seq 1 100`; do ... done

for ((i = 1; i <= 100; i++)); do

echo"--- Iteration #$i: $(date) ---"

time command1

done 2>&1 | tee timing.log

这里有很多事情。发生了什么?

for循环使用C样式语法从1迭代到100。

回显打印输出中的$i打印当前迭代编号。

$(date)在每个打印输出中插入一个时间戳。

time命令运行命令并打印执行所花费的时间。

循环内部所有内容的输出都通过管道传输到tee,这会将副本保存到timing.log。

2>&1将stderr重定向到stdout,以便日志文件将包含常规输出和错误消息。

以下脚本显示了一种实现方法。

#!/usr/bin/bash

for i in {1..100} ; do

echo =============================

echo"Number $i: $(date +%Y-%m-%d-%H:%M:%S)"

( time ( echo $i ; sleep 1 ) ) 2>&1 | sed 's/^/   /'

done | tee timing.log

它使用bash范围功能运行循环100次迭代,输出循环计数器和日期。

然后对命令(在这种情况下为echo $i ; sleep 1)进行计时,并结合标准输出和错误,然后再对其进行格式化,然后将其发送到终端和日志文件中,以供以后分析。

smaple运行五次迭代:

pax> testprog.sh

=============================

Number 1: 2010-09-16-13:44:19

1

real 0m1.063s

user 0m0.077s

sys  0m0.015s

=============================

Number 2: 2010-09-16-13:44:20

2

real 0m1.056s

user 0m0.030s

sys  0m0.046s

=============================

Number 3: 2010-09-16-13:44:21

3

real 0m1.057s

user 0m0.046s

sys  0m0.030s

=============================

Number 4: 2010-09-16-13:44:22

4

real 0m1.057s

user 0m0.061s

sys  0m0.031s

=============================

Number 5: 2010-09-16-13:44:23

5

real 0m1.057s

user 0m0.046s

sys  0m0.015s

您可以尝试:

for i in {1..100}; do time some_script.sh; done 2>&1 | grep ^real | sed -e s/.*m// | awk '{sum += $1} END {print sum / NR}'

说明

for循环运行some_script.sh 100次,并使用time测量其执行时间

for循环的stderr重定向到stdout,这是为了捕获time的输出,因此我们可以对其进行grep

grep ^real将仅获得time输出中以" real"开头的行

sed是删除行的开始,直到分钟部分(在time的输出中)

对于每行,awk加上总和,以便最后可以输出平均值,即总和除以输入记录数(= NR)

局限性

该代码段假定some_script.sh的运行时间少于1分钟,否则它将根本无法工作。取决于您的系统,time内置函数可能会有所不同。另一种选择是使用时间命令/ usr / bin / time代替内置的bash。

注意:此脚本是从此处提取的。

我想对组合实验计时,说说运行some_script.sh 10次时的总运行时间。 不知道这是否是正确的,但是如果按照您的方式做,我会执行不准确的time实验10次,因为每次some_script.sh完成得都太早了。

这部分:awk {sum += $1} END {print sum NR}将所有运行的总时间相加,然后除以执行时间。 因此,它将计算所有运行的平均值。

该脚本基于@ marian0的答案,但运行时间没有限制。将其命名为timeit.sh,然后执行./timeit.sh 10 ./script以运行./script 10次并打印平均时间。可以根据需要添加其他参数。

#!/bin/bash

for i in `seq 1 $1`; do

time"${@:2}"

done 2>&1 |\

grep ^real |\

sed -r -e"s/.*real\t([[:digit:]]+)m([[:digit:]]+\.[[:digit:]]+)s/\1 \2/" |\

awk '{sum += $1 * 60 + $2} END {print sum / NR}'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值