私はRaspberry Piの温度を記録するために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
すべてのエコーは、何が起こっているのかを理解しようとするだけです。
このスクリプトを修正する方法とより良い方法についてのアドバイスをいただきありがとうございます!
私はもともとこれをRaspberry Pi Stack Exchangeに投稿しました。温度を記録するスクリプト- しかし、ここに入れなければならないと聞きました。
答え1
最初の問題は、次の後にスペースがあることです=
。
TEMP= grep -o [1-9][0-9]\.[0-9] /tmp/temp.txt
これは間違っており、スクリプトが破損する可能性があります。次の問題は、コマンド自体を出力ではなく変数に文字列として割り当てることです。
$ foo=date
$ echo $foo
date
コマンドを実行してその出力を変数に保存するには、$(command)
または次を使用する必要があります`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
私はJaniceの答えを好む。しかしrrdtool
、この種の場合、より良いオプションを見つけることができます。所定のスロット(またはスロットが失われた場合はNV)にその値を記録します。その後、非常にクールなチャートを作成したり、データをXMLまたはTSVに出力するために使用できます。はじめにチュートリアルは次のとおりです。http://oss.oetiker.ch/rrdtool/tut/rrd-beginners.en.html