我想编写一个脚本来识别是否有人从我的samba服务器传输数据(即音乐是否正在播放)。为此,我想出了一个这样的脚本:
Waiting for first packet to arrive (see sourceforge.net bug 1019381)
result: 6.73438
rounded: 6.73438
/home/ron/scripts/keepup.sh: line 10: [[: 6.73438: syntax error: invalid arithmetic operator (error token is ".73438")
quiet
但我明白了:
&
虽然显然应该将结果“6.73438”计算为true。好像我的舍入工作不正常。我用Google搜索但只找到了使用echo或printf的答案,但这就是我需要的东西,因为我想将舍入结果输入if条件。
答案 0 :(得分:4)
这是错误的:
sent="($sent+0.5)/1" | bc
你需要:
sent=$(bc <<< "($sent+0.5)/1")
或者:
sent=$(echo "($sent+0.5)/1" | bc)
答案 1 :(得分:1)
bc
没有进行任何舍入。考虑那些测试:
$ a="17.928671"; a=$(bc -l <<<"scale=3; $a/1");echo "$a"
17.928
$ a="17.928671"; a=$(printf '%.3f\n' "$a");echo "$a"
17.929
关于bc
考虑scale
选项可用于调整小数位数(scale = 3),但要激活此scale=3
bc
期待收到一个部门。
因此,如果您需要舍入,我建议使用printf