shell循环计算平均值时一直提示非数值型错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell循环计算平均值时一直提示非数值型错误相关的知识,希望对你有一定的参考价值。

#!/bin/sh
count=0
sumspeed=0
if [ -f speedlist ];then
rm -rf speedlist
fi
while true
do
speed=$(mysql -uroot -p234 test_db -e "select SPEED from V_DBA_PROC_STATS where ITEM='xxxxx;"|grep -v SPEED)//从表中循环读取一个字段的值
echo "the now speed is $speed"
count=`expr $count + 1`循环一次计数加1
echo "the count is $count"
sleep 5
echo $speed>speedlist//把取到的speed值追加到文件speedlist
# sed -i 's/\n/ /g' speedlist
# i=$(cat speedlist)
# echo "the i is $i"
echo "********************"
sumspeed=`expr $sumspeed + $speed`//循环一次,sumspeed增加一个speed值
echo "the sum speed is $sumspeed"
avgspeed=`expr $sumspeed / $count`//当前的sumspeed除以循环次数,求的当前的平均值
echo "the avg speed is $avgspeed"

done
运行时总是报以下错误,求高手解答
错误信息
the now speed is 8369.4000
the count is 1
********************
expr: non-numeric argument
the sum speed is
expr: syntax error
the avg speed is
the now speed is 8068.1000
the count is 2

expr好像只能处理整数吧?

8369.4000
expr: non-numeric argument

expr命令为Linux中的命令,一般用于整数值计算,但也可用于字符串操作。
数值测试
可以用expr测试一个数。如果试图计算非整数,将返回错误。

$rr=1.1

$expr $rr + 1

expr: non-numeric argument

$rr=2

$expr $rr + 1

3

这里需要将一个值赋予变量(不管其内容如何),进行数值运算,并将输出导入dev/null,然后测试最后命令状态,如果为0,证明这是一个数,其他则表明为非数值。

$VALUE=12

$expr $VALUE + 10 > /dev/null 2>&1

$echo $?

0

这是一个数。

$VALUE=hello

$expr $VALUE + 10 > /dev/null 2>&1

$echo $?

2

这是一个非数值字符。
参考技术A

expr不支持浮点数运算。

8369.4000 是个浮点数,用expr做加法运算会给出报错 expr: non-numeric argument。

 

建议用bc或awk来运算。

例如:

sumspeed=`expr $sumspeed + $speed`
avgspeed=`expr $sumspeed / $count`

可以分别改为:

sumspeed=`echo $sumspeed + $speed | bc`
avgspeed=`echo "scale=4; $sumspeed / $count" | bc`

 加减法运算不会造成精度损失,乘法和除法运算可以使用参数scale来指定精度(保留小数点后多少位)。

本回答被提问者采纳
参考技术B 1、expr在脚本中运行的时候,运算符号最好加转义字符\
2、建议别用expr,使用$[ a + b ] 这种模式来运算。
3、expr只支持整数,如果需要符点运算,则可以使用bc

例如你的脚本中:count=`expr $count + 1`

将其改为:count=$[ $count + 1 ]

03_python的数据类型

python的数据类型

1.python中的数据类型

(1)数据类型分类

python的数据类型可以分为 数字型非数字型

  • 数字型
    • 整型 (int)
    • 浮点型(float
    • 布尔型(bool
    • 复数型 (complex)(主要用于科学计算)
  • 非数字型
    • 字符串
    • 列表
    • 元组
    • 字典

提示:在 Python 2.x 中,整数根据保存数值的长度还分为: int(整数) long(长整数)

(2)不同类型变量之间的运算问题:

  • 数字型变量之间可以直接计算
  • 字符串变量之间使用 +拼接字符串
  • 字符串变量可以和 整数 使用 *重复拼接相同的字符串
  • 数字型变量字符串之间不能进行其他计算

    2.python中变量的定义与使用

  • 定义:python是解释型编程语言,它在定义变量时不需要指定数据类型。解释器会根据赋值运算符右边的数值进行自动识别数据类型。
  • 使用:在 Python 中,每个变量在使用前都必须赋值,变量 赋值以后该变量才会被创建

注意:使用交互式和解释器形式定义和使用变量上有所区别。

3.python中变量的命名

  • python 标识符区分大小写
  • python 可以采用的变量命名方式:
    • 下划线法
    • 小驼峰法
    • 大驼峰法

以上是关于shell循环计算平均值时一直提示非数值型错误的主要内容,如果未能解决你的问题,请参考以下文章

怎么在SQLServer计算列和平均值

第四天第一个问题

在linux 下编写awk脚本计算每个人的平均成绩及所有人的平均成绩

Python 中 输入一个数值列表,并求出其平均值。

怎样在Excel中计算所有人的平均年龄??!

怎样用C语言求平均数