1

我想用 Munin 来显示我的数据波。我从 ttyACM0 获取数据,它是一个 Arduino UNO。我使用shell脚本。但是我遇到了一个问题,我无法使用“cat /dev/ttyACM0”来获取数据。这是问题所在,程序在'cat /dev/ttyACM0'处停止,

+ . /usr/share/munin/plugins/plugin.sh
+ '[' '' = autoconf ']'
+ '[' '' = config ']'
++ cat /dev/ttyACM0

有时还有另一个问题,就是找不到 'LINE = $(cat /dev/ttyACM0 | awk -F: '{print $2}')' 命令。有人有想法吗?非常感谢。

这是我的代码的一部分,

if [ "$1" = "config" ]; then
    echo 'graph_title Temperature of board'
    echo 'graph_args --base 1000 -l 0'
    echo 'graph_vlabel temperature(°C)'
    echo 'graph_category temperature'
    echo 'graph_scale no'
    echo 'graph_period second'
    echo 'graph_info This graph shows the temperature of board'
    LINE = $(cat /dev/ttyACM0 | awk -F: '{print $2}')

    for i in 0 1 2 3 4; do
        case $i in
            1)
            TYPE="Under PCB"
            ;;
            2)
            TYPE="HDD"
            ;;
            3)
            TYPE="PHY"
            ;;
            4)
            TYPE="CPU"
            ;;
            5)
            TYPE="Ambience"
            ;;
        esac
        name=$(clean_name $TYPE)
        if ["$TYPE" != "NA"]; then 
            echo "temp_$name.label $TYPE";
        fi
    done
    exit 0
 fi

LINE = $(cat /dev/ttyACM0 | awk -F: '{print $2}')
for i in 0 1 2 3 4; do
    case $i in
        1)
        TYPE="Under PCB"
        VALUE=$(echo "$LINE" | awk '{print $1}')
        ;;
        2)
        TYPE="HDD"
        VALUE=$(echo "$LINE" | awk '{print $2}')
        ;;
        3)
        TYPE="PHY"
        VALUE=$(echo "$LINE" | awk '{print $3}')
        ;;
        4)
        TYPE="CPU"
        VALUE=$(echo "$LINE" | awk '{print $4}')
        ;;
        5)
        TYPE="Ambience"
        VALUE=$(echo "$LINE" | awk '{print $5}')
        ;;
    esac

    name=$(clean_name $TYPE)
    if ["$TYPE" != "NA"]; then
        echo "temp_$name.value $VALUE";
    fi
done
4

2 回答 2

2

=删除标志两侧的空格。它们在变量赋值中是不允许的。

将其更改为:

LINE=$(cat /dev/ttyACM0 | awk -F: '{print $2}')
于 2012-09-26T15:03:49.810 回答
2

LINE 错误的问题在于“=”字符周围有空格。一定是LINE=...

如果/dev/ttyACM0是一个不指示 EOF 的设备,那么它将等待更多的读取,并且awk将等待一个永远不会出现的 EOF。你究竟期望/dev/ttyACM0生产什么?如果您cat /dev/ttyACM0在控制台上键入会发生什么?

进一步注意 cat 的无用用法。更好的使用

LINE=$(awk -F: '{print $2}' /dev/ttyACM0)

你必须在其中添加空间,if ["$TYPE" != "NA"]; then这样它才会显示

if [ "$TYPE" != "NA" ]; then
于 2012-09-26T15:04:17.200 回答