【问题标题】:Munin in shell scriptshell脚本中的穆宁
【发布时间】:2012-09-26 23:11:00
【问题描述】:

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

【问题讨论】:

    标签: linux shell arduino munin


    【解决方案1】:

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

    改成:

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

    【讨论】:

      【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-19
        • 2021-11-11
        • 2020-10-05
        • 2011-05-21
        相关资源
        最近更新 更多