[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 阅读(1689) 评论(1) 编辑 收藏 举报