bash中的圆形变量而不将其打印到stdout

时间:2017-09-04 23:03:33

标签: bash shell

我想编写一个脚本来识别是否有人从我的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条件。

2 个答案:

答案 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