我一直在尝试编写一个 BASH 脚本来记录我的树莓派的温度。我的计划是每 15 分钟或其他时间将其作为 crontab 运行一次。但是我不断收到错误,我认为这与我将字符串连接在一起有关,我想要 DATE1;TEMP1 DATE2;TEMP2 等(csv)
我的代码是;
#!/bin/bash
vcgencmd measure_temp > /tmp/temp.txt
TEMP= grep -o [1-9][0-9]\.[0-9] /tmp/temp.txt
DATE= date +%Y-%m-%d\ %H:%M
STR="$DATE"
echo $STR
STR+=";"
echo $STR
STR+="$TEMP"
echo $STR
echo $STR >> /home/pi/temp_hist.csv
所有的回声只是我试图弄清楚发生了什么。
我将不胜感激修复此脚本的指示以及更好的方法!
我最初将其发布在树莓派堆栈交换上 -记录温度的脚本- 但被告知应该放在这里。
答案1
第一个问题是在 后面有一个空格=
:
TEMP= grep -o [1-9][0-9]\.[0-9] /tmp/temp.txt
这是错误的,会破坏你的脚本。下一个问题是您将命令本身作为字符串分配给变量而不是它们的输出:
$ foo=date
$ echo $foo
date
要运行该命令并将其输出保存到变量中,您需要使用$(command)
or `command`
:
$ foo=$(date)
$ echo $foo
Mon May 25 19:09:11 EEST 2015
您还有其他各种可以改进的地方。试试这个:
#!/usr/bin/env bash
vcgencmd measure_temp > /tmp/temp.txt
## Avoid using UPPER CASE variable names since they
## can conflict with environmental variables.
temp=$(grep -o "[1-9][0-9]\.[0-9]" /tmp/temp.txt)
date=$(date +"%Y-%m-%d %H:%M")
## No need for another variable
printf "%s;%s\n" "$date" "$temp" >> /home/pi/temp_hist.csv
答案2
假设vcgencmd measure_temp
将创建单个定点数,此命令可能会执行您想要的操作:
temp=$( vcgencmd measure_temp | grep -o '[0-9]*\.[0-9]' )
date "+%Y-%m-%d %H:%M;${temp}" >> /home/pi/temp_hist.csv
答案3
无需构建字符串并附加到其上,只需直接创建字符串即可:
➜ ~ DATE="1234"
➜ ~ TEMP="15"
➜ ~ STR="$DATE;$TEMP"
➜ ~ echo $STR
1234;15
答案4
我偏向贾尼斯的回答。但是,rrdtool
对于此类事情,您可能会找到更好的选择。它在预先确定的时隙中记录其值(如果时隙丢失,则记录 NV)。然后它可以用来创建一些非常漂亮的图表,或者将数据输出到 XML 或 TSV。这是入门教程:http://oss.oetiker.ch/rrdtool/tut/rrd-beginners.en.html