如何为每个运行的脚本设置计时器

时间:2018-12-18 22:01:18

标签: linux bash date awk printf

亲爱的朋友和大学

很高兴能在这里堆满最好的网站

在/ tmp / scripts下,我们大约有128个脚本可以执行许多测试

verify_dns.sh
verify_ip.sh
verify_HW.sh

依此类推

我们决定在当前文件夹-/ tmp / scfipt下运行所有​​脚本 使用以下代码

script_name=` find /tmp/scripts  -maxdepth 1  -type f -name "verify_*"   -exec basename {} \; `

for i in $script_name
do
  echo running the script - $i
  /tmp/scripts/$i
done

所以输出是这样的

running the script - verify_dns.sh
running the script - verify_ip.sh
.
.

我们要添加的-能够打印脚本运行时间的功能

如以下示例

running the script - verify_dns.sh   - 16.3 Sec
running the script - verify_ip.sh    - 2.5 Sec
.
.

我的问题,我们如何才能在我的代码中添加此功能?

注意-操作系统版本-是redhat 7.2

3 个答案:

答案 0 :(得分:2)

您可以使用time命令告诉您每个人花费了多长时间:

TIMEFORMAT="%E"
for i in $script_name
do
  echo -en "running the script - $i\t - "
  exec 3>&1 4>&2
  var=$( { time /tmp/scripts/$i 1>&3 2>&4; } 2>&1)  # Captures time only
  exec 3>&- 4>&-

  echo "$var Sec"
done

无论您的脚本是否产生任何输出/ stderr,此方法均有效。请参阅以下链接,仅捕获时间输出:get values from 'time' command via bash script

答案 1 :(得分:1)

您可以使用计算秒数

SECONDS=0 ; 
your_bash_script ; 
echo $SECONDS

进行更敏感的计算

start=$(date +'%s%N') 
your_shell_script.sh
echo "It took $((($(date +'%s%N') - $start)/100000)) miliseconds"

用于内部时间功能

time your_shell_script.sh

编辑:为OP提供的示例

for i in $script_name
do
  echo running the script - $i
  start=$(date +'%s%N')
  /tmp/scripts/$i
  echo "It took $((($(date +'%s%N') - $start)/100000)) miliseconds"
done

for i in $script_name
do
  echo running the script - $i
  time /tmp/scripts/$i
done

答案 2 :(得分:0)

虽然它不会将输出放在同一行上,但这可能适合您的需求。

for i in $script_name
do { set -x;
     time "$i";
   } 2>&1 | grep -Ev '^(user|sys|$)'
done