Munin在shell脚本中

时间:2012-09-26 14:19:23

标签: linux shell arduino munin

我想用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

2 个答案:

答案 0 :(得分:2)

删除=符号两侧的空格。它们不允许进行变量赋值。

将其更改为:

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

答案 1 :(得分:2)

LINE错误的问题是'='字符周围有空格。它必须是LINE=...

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

进一步注意猫的无用。更好地使用

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

您必须在if ["$TYPE" != "NA"]; then中添加空格,使其显示为

if [ "$TYPE" != "NA" ]; then