[shell]计算未知个数数据的平均值

本文介绍如何使用Shell脚本处理未知数量的输入并计算平均值。通过利用系统变量$#获取参数数量,并借助bc计算器解决浮点数运算问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天嵌入式课上老师出了这么一道题目:请编写一个shell脚本计算未知输入数据的平均值

当时我就懵了,数据个数是未知的,那怎么得到它的个数呢,难道一个一个读入赋值运算么?

经过翻阅相关书籍,才发现,shell里面还有几个非常实用的系统变量:

1 $#  程序命令行参数数目
2 $?  前一个命令的返回值
3 $0  当前程序名
4 $n  命令行参数,如$1为第一个参数$2为第二个,以此类推
5 $*  以("$1 $2 $3 $4 ...")的形式保存所有输入命令行参数
6 $@  以("$1" "$2" "$3" ...)的形式保存所有输入命令行参数

知道了这些,写起来就很快了

1 #! /bin/bash
2 let sum=0
3 for num in $*
4 do
5         let sum=$sum+$num
6 done
7 let avrg=$sum/$#
8 echo $avrg

保存为calavrg.sh之后,运行./calavrg.sh 2 2 4 4 4

问题又来了,输出结果却是 3,原来shell不能计算浮点数,未经我同意就把它取整了

于是乎上网搜浮点数运算,最后找到一个好工具,那就是linux系统自带的 bc计算器,

我们可以将$sum/$#的结果重定向到bc计算器里计算,这样得到的结果就是浮点数,如果想保留有限位小数,可以使用scale=n这条命令(n是指几位小数)

修改后的脚本是这样的:

1 #! /bin/bash
2 let sum=0
3 for num in $*
4 do
5         let sum=$sum+$num
6 done
7 echo "scale=2; $sum/$#" |bc

这样运行./calavrg.sh 2 2 4 4 4 的结果就为3.10

done!

转载于:https://www.cnblogs.com/evisie/archive/2012/05/11/2496282.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值