Linux新手求助:编写avg.sh脚本计算pi程序平均运行时间
搞定avg.sh脚本:自动计算pi程序多次运行的平均耗时
嘿,作为Linux新手,这个需求其实很好实现,我给你一步步拆解,写一个清晰又健壮的脚本,你跟着做就行:
先理清楚核心逻辑
我们的脚本要做三件事:
- 检查用户输入的运行次数是不是合法(必须是正整数)
- 循环指定次数运行
./pi,收集每次的耗时 - 把所有耗时加起来,除以次数得到平均值,最后输出
完整脚本代码(带详细注释)
直接给你写好完整的脚本,每一行都加了注释,你能看懂每一步在干嘛:
#!/bin/bash # 第一步:检查用户有没有传对参数 if [ $# -ne 1 ]; then echo "用法: $0 <运行次数>" echo "举个例子: ./avg.sh 10" exit 1 # 参数不对就退出脚本 fi # 把用户输入的次数存到变量n里 n=$1 # 检查n是不是正整数(防止用户输入0、负数或者字母) if ! [[ "$n" =~ ^[1-9][0-9]*$ ]]; then echo "哎呀,运行次数得是正整数哦,比如1、10、100这样的" exit 1 fi # 检查当前目录下有没有可执行的pi程序 if [ ! -x "./pi" ]; then echo "出错啦!当前目录找不到能运行的pi程序,请确认它在当前文件夹,并且有执行权限(可以用chmod +x pi添加权限)" exit 1 fi # 初始化总耗时为0 total_time=0 echo "开始运行pi程序$n次啦,稍等..." # 第二步:循环运行pi程序n次 for ((i=1; i<=n; i++)); do # 运行pi程序,把它输出的耗时存到current_time里 # 这里默认pi程序直接输出耗时数字(比如1.23),如果你的pi输出有其他内容,看下面的说明调整 current_time=$(./pi) # 额外检查:确保pi输出的是合法的数字,避免异常值影响结果 if ! [[ "$current_time" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then echo "警告:第$i次运行pi时输出有点问题,这次结果不算啦" continue fi # 用bc命令做浮点累加(bash本身只能处理整数,所以得用bc来算小数) total_time=$(echo "$total_time + $current_time" | bc -l) echo "第$i次耗时: $current_time 秒" done # 第三步:计算平均耗时,保留两位小数(scale=2可以改成你想要的小数位数) avg_time=$(echo "scale=2; $total_time / $n" | bc -l) # 最后输出结果 echo "----------------------------------------" echo "搞定!共运行$n次,平均耗时: $avg_time 秒"
针对pi程序输出的特殊情况调整
如果你的pi程序不是直接输出数字,而是类似这样的输出:
圆周率计算完成,耗时:1.45秒
那你需要把提取耗时的那一行改成这样,用grep和正则把数字抠出来:
current_time=$(./pi | grep -oP '耗时:\K[\d.]+')
解释一下:grep -oP用来匹配特定模式,\K表示忽略前面的内容,只保留后面的数字部分。
怎么用这个脚本?
- 把上面的代码复制到一个文本文件里,命名为
avg.sh - 打开终端,给脚本加执行权限:
chmod +x avg.sh - 运行脚本:
./avg.sh 10(这里的10就是你要运行的次数,换成你需要的数字就行)
小提示
bc是Linux自带的浮点计算工具,几乎所有发行版都有,不用担心找不到- 如果运行时出现权限问题,记得给pi程序也加执行权限:
chmod +x pi
内容的提问来源于stack exchange,提问作者EeHang Tang
相关产品推荐
相关产品推荐

