저는 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