zoukankan      html  css  js  c++  java
  • [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!

  • 相关阅读:
    C++中类模板的概念和意义
    欢迎访问新博客aiyoupass.com
    P2327
    P2885
    P1968
    Link-Cut-Tree
    树的重心
    点分治笔记
    SPOJ 375
    树链剖分
  • 原文地址:https://www.cnblogs.com/evisie/p/2496282.html
Copyright © 2011-2022 走看看