Bash シンプルスクリプトが正しく動作しません。

Bash シンプルスクリプトが正しく動作しません。

私はこの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 

これは1つのステップで実行できます。これらすべてをまとめると、次のスクリプトバージョンが機能するはずです。

#!/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

おすすめ記事