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
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循环计算平均值时一直提示非数值型错误的主要内容,如果未能解决你的问题,请参考以下文章