저는 이 bash 코드를 사용하여 Raspberry Pi의 온도를 가져오고 화씨와 섭씨로 변환하여 표시한 다음 텍스트 파일에 저장하려고 합니다.
#!/bin/bash
echo ""
cpu="$(/opt/vc/bin/vcgencmd measure_temp)"
far=$((cpu/1000))
far2=$((far*9))
far3=$((far2/5))
far4=$((far3+32))
echo "CPU => $((cpu/1000))' C or $((far4))' F"
echo ""
echo "Pi temp $far4 degrees F" > /var/www/html/pitemp.txt
그런데 실행해 보면 화씨는 괜찮은데 섭씨는 왜 안 나오나요?
pi@raspberrypi:~ $ nano checkTemp.sh
pi@raspberrypi:~ $ ./checkTemp.sh
./checkTemp.sh: line 3: temp=40.0'C: command not found
CPU => 0' C or 32' F
pi@raspberrypi:~ $ /opt/vc/bin/vcgencmd measure_temp
temp=40.0'C
CPU와 Far 값을 확인해 봤는데 안되는 것 같습니다. 어떤 제안이 있으십니까? [해결됨]
#!/usr/bin/env bash
echo ""
cpu="$(/opt/vc/bin/vcgencmd measure_temp | sed -E 's/.*=([0-9.]*).*/\1/')"
## convert to Fahrenheit
far=$( echo "$cpu * 9/5 + 32" | bc -l)
## Remove extra decimal digits
printf "CPU => %.2f' C or %.2f' F\n" "$cpu" "$far"
echo ""
printf "Pi temp %.2f degrees F\n" "$cpu" > /var/www/html/pitemp.txt
echo "C:$cpu F:$far"
이 새 코드는 작동하지만 출력은 다음과 같으므로 화씨 온도에 문제가 있는 것 같습니다.
pi@raspberrypi:~ $ nano checkTemp.sh
pi@raspberrypi:~ $ ./checkTemp.sh
./checkTemp.sh: line 5: bc: command not found
CPU => 43.00' C or 0.00' F
C:43.0 F:
pi@raspberrypi:~ $ /opt/vc/bin/vcgencmd measure_temp
temp=43.0'C
pi@raspberrypi:~ $
답변1
귀하의 $cpu
변수는 temp=40.0'C
. 숫자가 아니고, 나누거나 곱할 수 없으므로 먼저 실제 수치를 추출해야 합니다. 그러니 나가야 합니다 40.0
. 다음과 같은 방법으로 이 작업을 수행할 수 있습니다.
cpu="$(/opt/vc/bin/vcgencmd measure_temp | sed -E 's/.*=([0-9.]*).*/\1/')"
다음 문제는 bash가 부동 소수점 연산을 수행할 수 없다는 것입니다. 따라서 정수가 아닌 값을 처리할 수 없습니다. 다음과 같은 또 다른 도구가 필요합니다 bc
.
far=$(echo "$cpu/1000" | bc -l)
물론 CPU 온도는 섭씨 1000도 이상(또는 거의 가까움)이 절대 아니기 때문에 이 구분은 정확할 수 없습니다. 섭씨를 화씨로 변환하는 공식은 다음과 같습니다.
T(°F) = T(°C) × 9/5 + 32
이 작업은 한 단계로 수행할 수 있습니다. 이 모든 것을 종합하면 다음과 같은 스크립트 버전이 작동해야 합니다.
#!/usr/bin/env bash
echo ""
cpu="$(/opt/vc/bin/vcgencmd measure_temp | sed -E 's/.*=([0-9.]*).*/\1/')"
## convert to Fahrenheit
far=$( echo "$cpu * 9/5 + 32" | bc -l)
## Remove extra decimal digits
printf "CPU => %.2f °C or %.2f °F\n" "$cpu" "$far"
echo ""
printf "Pi temp %.2f degrees F\n" "$far" > /var/www/html/pitemp.txt
없는 경우 bc
다음을 사용할 수 있습니다.
#!/usr/bin/env bash
echo ""
cpu="$(/opt/vc/bin/vcgencmd measure_temp | sed -E 's/.*=([0-9.]*).*/\1/')"
## convert to Fahrenheit
far=$( perl -le 'print $ARGV[0] * 9/5 + 32' "$cpu")
## Remove extra decimal digits
printf "CPU => %.2f °C or %.2f °F\n" "$cpu" "$far"
echo ""
printf "Pi temp %.2f degrees F\n" "$far" > /var/www/html/pitemp.txt