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

今天嵌入式课上老师出了这么一道题目:请编写一个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!

posted on 2012-05-11 16:14  Junjie Shen  阅读(1671)  评论(1编辑  收藏  举报