2015-03-30 8 views
1

Я пытаюсь настроить небольшой 3-битный счетчик процессора на моей малине Pi2, и после того, как я узнал, что обычная Shell не любит плавать, я наткнулся на «BC»Использование BC в оболочке If-statement выводит целочисленное выражение, ожидаемое

После нескольких часов работы я получил мой сценарий для работы, но использование процессора бросить высоким, поскольку консоль всегда пишет «целое выражение ожидается»

Я действительно не знаю, как это исправить, или почему эту ошибку даже сохраняется, сценарий отлично работает, но он забивает мои CPU Cycles ...

Можете ли вы посмотреть мой сценарий и, может быть, объяснить мне, почему это это ошибка?

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 

Благодаря всем, кто предпринимает свое время, чтобы посмотреть на это.

С наилучшими пожеланиями!

ответ

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 
1

Если утверждения if успешны, у вас есть bc печать 1, но когда они терпят неудачу, он ничего не печатает. bash жалуется, что "" не является целым числом.

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

Вы можете передать только выражение отношения к bc. Естественно, он напечатает 1 или 0 на основании результата оператора <.