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 

您可以一步完成此操作。将所有这些放在一起,这应该是脚本的工作版本:

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

相关内容