亲爱的朋友和大学
很高兴能在这里堆满最好的网站
在/ 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
答案 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