Linux 无法获取命令输出的绝对值
因此,我想制作一个简单的脚本来不断检查我的RasPi的CPU温度,它存储在Linux 无法获取命令输出的绝对值,linux,bash,shell,terminal,sh,Linux,Bash,Shell,Terminal,Sh,因此,我想制作一个简单的脚本来不断检查我的RasPi的CPU温度,它存储在/sys/class/thermal/thermal\u zone0/temp中,因此cat/sys/class/thermal/thermal\u zone0/temp将给出温度,但如下所示: cat /sys/class/thermal/thermal_zone0/temp 38459 也就是说38.459摄氏度 我无法将输出格式化为38.594°C 我的代码: tempT="$(cat /sys/class/the
/sys/class/thermal/thermal\u zone0/temp
中,因此cat/sys/class/thermal/thermal\u zone0/temp
将给出温度,但如下所示:
cat /sys/class/thermal/thermal_zone0/temp
38459
也就是说38.459摄氏度
我无法将输出格式化为38.594°C
我的代码:
tempT="$(cat /sys/class/thermal/thermal_zone0/temp)"
tempC=$($tempT / 1000)
echo "$tempC °C"
我得到的错误是:
-bash: 38459: command not found
°C
谢谢如果您的系统上有bc,我会使用它
$ CELSIUS=$(bc -l <<< $(cat /sys/class/thermal/thermal_zone0/temp)/1000)
$ echo $CELSIUS
25.00000000000000000000
摄氏=$(bc-l最简单的方法是使用awk
awk '{print $1/1000}' /sys/class/thermal/thermal_zone0/temp
或者使用printf进行更多控制
awk '{printf "%.3f\n", $1/1000}' /sys/class/thermal/thermal_zone0/temp
您看到的错误来自于您使用了$(…)
,这是一个命令替换,并试图在内部运行该命令。因此,当您这样做时:
$($tempT / 1000)
首先,$test
扩展到38459,然后shell尝试运行名为38459
的命令,该命令有两个参数/
和1000
。因此您会看到消息38459:command not found
。请使用$(…)
用于算术扩展,但shell不实现浮点算术,因此您必须使用其他工具,如awk
或bc
TempC=$($tempT / 1000);
决心:
TempC=$(38459 / 1000);
bash将$(…)
视为要传递到子shell的命令,因此它尝试运行无法找到的可执行文件38455
,并因此发出抱怨
我会使用@kinezan建议的bc
,尽管我个人更喜欢以下约定:
TempC=$(echo "scale=3; $tempT / 1000" | bc)
它输出38.459
$($TELT/10)
->$($TELT/10))
,但“除以10”不是一个绝对值。您是想要,还是想要解决错误,还是想要用逗号后的3位数字打印值?您的问题是什么?是的,我想要用小数后的最后3位数字打印值。同时将其更改为$((试探/1000))
告诉我-bash:entit:command not found°C
传感器是否精确到小数点后3位,您是否确实需要该精度级别?tempC=$((entit/1000))
可以让您区分38°C和39°C(尽管结果总是四舍五入到0,而不是最接近的整数)。它应该是,因为bc
是POSIX规范的一部分。