我尝试在Raspberry Pi2上设置一点3bit CPU Meter,发现正常的Shell不喜欢浮动后,偶然发现了“ BC”

工作了几个小时后,我的脚本可以工作了,但是CPU使用率很高,因为控制台总是写“期望的整数表达式”

我真的不知道该如何解决这个问题,或者为什么这个错误甚至持续存在,脚本仍然可以正常工作,但是它会重击我的CPU周期...

您可以看看我的脚本,也许可以向我解释为什么会引发此错误?

while :
do
sleep 0.5
var=$(egrep -o '([0-9]{1})\.[0-9]{2}' /proc/loadavg | head -1 )
c005=0.05
c10=1.0
c05=0.5
c006=0.06

if [ "$(echo "if (${var} < ${c005}) 1" | bc)" -eq 1 ] ; then
    gpio write 0 0  
    gpio write 2 0
    gpio write 3 0

elif [ "$(echo "if (${var} > ${c10}) 1" | bc)" -eq 1 ] ; then
    gpio write 0 1 
    gpio write 2 1 
    gpio write 3 1

elif [ "$(echo "if (${var} > ${c05}) 1" | bc)" -eq 1 ] ; then
    gpio write 0 1 
    gpio write 2 1 
    gpio write 3 0

elif [ "$(echo "if (${var} > ${c006}) 1" | bc)" -eq 1 ] ; then
    gpio write 0 1 
    gpio write 2 0 
    gpio write 3 0

else
    gpio write 0 0  
    gpio write 2 0
    gpio write 3 0

fi
done

错误:

./cpu.proc: line 20: [: : integer expression expected
./cpu.proc: line 10: [: : integer expression expected
./cpu.proc: line 15: [: : integer expression expected
./cpu.proc: line 20: [: : integer expression expected
./cpu.proc: line 10: [: : integer expression expected
./cpu.proc: line 15: [: : integer expression expected
./cpu.proc: line 20: [: : integer expression expected
./cpu.proc: line 10: [: : integer expression expected
./cpu.proc: line 15: [: : integer expression expected
./cpu.proc: line 20: [: : integer expression expected
./cpu.proc: line 10: [: : integer expression expected
./cpu.proc: line 15: [: : integer expression expected
./cpu.proc: line 20: [: : integer expression expected
./cpu.proc: line 10: [: : integer expression expected
./cpu.proc: line 15: [: : integer expression expected
./cpu.proc: line 20: [: : integer expression expected
./cpu.proc: line 10: [: : integer expression expected
./cpu.proc: line 15: [: : integer expression expected
./cpu.proc: line 20: [: : integer expression expected
./cpu.proc: line 10: [: : integer expression expected
./cpu.proc: line 15: [: : integer expression expected

感谢所有花时间研究此问题的人。

最好的祝愿!

#1楼 票数:1

如果if语句成功,则bc打印1 ,但是如果失败,则不打印任何内容。 bash抱怨""不是整数。

if [ "$(echo "${var} < ${c005}" | bc)" -eq 1 ] ; then

您可以只将关系表达式传递给bc 它自然会根据<运算符的结果打印10

#2楼 票数:0 已采纳

gpio mode 0 out;
gpio mode 2 out;
gpio mode 3 out;
while :
do
sleep 1.2
var=$(egrep -o '([0-9]{1})\.[0-9]{2}' /proc/loadavg | head -1 )
c005=0.05
c10=1.0
c05=0.5
c006=0.06

if [ "$(echo "if(${var} < ${c005}) 1" | bc)" == "1" ] ; then
    gpio write 0 0  
    gpio write 2 0
    gpio write 3 0

elif [ "$(echo "if (${var} > ${c10}) 1" | bc)" == "1" ] ; then
gpio write 0 1 
gpio write 2 1 
gpio write 3 1
elif [ "$(echo "if (${var} > ${c05}) 1" | bc)" == "1" ] ; then
gpio write 0 1 
gpio write 2 1 
gpio write 3 0
elif [ "$(echo "if (${var} > ${c006}) 1" | bc)" == "1" ] ; then
gpio write 0 1 
gpio write 2 0 
gpio write 3 0


else
gpio write 0 0  
gpio write 2 0
gpio write 3 0

fi
done

  ask by user3327172 translate from so

未解决问题?本站智能推荐:

3回复

BC中的“整数表达式预期错误”

我在这行中得到“ bc:期望整数表达式”: 在运行脚本时。 我该如何解决这个错误?
1回复

raspberrypi与其他脚本一起使用shell脚本

我正在尝试使用gpio引脚打开或关闭树莓派的LED。 我写了这个sh脚本说它不起作用... 有人看到错误了吗?
1回复

在按钮上调用shell脚本,然后按一次并杀死它

我似乎无法弄清楚调用后如何杀死python中的脚本。 有任何想法吗? “Party.py”: dalitest (灯光控制脚本): http : dalitest 此处将另一个Python脚本称为os.system(“ ./ home / tim / bin / dalitest”
1回复

RaspberryPi屏幕保护程序/DMPS开/关以在更改时触发shell脚本

我有一个没有背光控制的触摸屏,关闭 HDMI 输出只会在屏幕上显示一个“无信号”占位符。 我已经将八耦合器焊接到电源开关上以通过 GPIO 引脚控制它,并且工作正常。 我想要做的是每次 Pi 更改 DPMS 状态时切换 shell 脚本 (screen_toggle.sh)。 即,只要 DMPS 将
3回复

如何在bashwhile循环条件语句中使用bc?

我正在写什么应该是一个简单的bash脚本来计算最小值p需要在公式C = 1-(p ^ n)中。 C和p由用户输入,并且是浮点数。 例如,如果C = 0.36和p = 0.8,则我的程序应为n的值返回2,因为1-(0.8 ^ 2)= 0.36 我的代码如下。 请注意:我在while循环
2回复

使用Shell脚本和BC

我在许多方面对编程都非常陌生,因此感谢您忍受我的愚蠢,因为我确信我没有以正确的方式提出这个问题。 多年来,我不得不第一次使用Linux机器和许多命令行工具。 我需要使用已编写并准备就绪的云模型进行蒙特卡洛模拟。 它有一个输入文件,我需要更改设置输入值才能使用某种随机数生成器生成。 我的
2回复

在shell脚本中正确使用bc吗?

我只是想用 bc 乘以一些浮点变量: 这并没有给我一个输出。 我知道这是一个愚蠢的方法,但我尝试了多种 bc 组合(在不同的地方等)都无济于事。 任何帮助将不胜感激!
1回复

Shell脚本中的算术表达式错误

首先,我将取昨天和今天文件大小的值(以字节为单位)(a =昨天和b =今天) 我需要计算百分比,并找出差异是否大于或小于10% 这不行