无法获得命令输出的绝对值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法获得命令输出的绝对值相关的知识,希望对你有一定的参考价值。
因此,我想编写一个简单的脚本来继续检查存储在/sys/class/thermal/thermal_zone0/temp
中的RasPi的CPU温度,因此cat /sys/class/thermal/thermal_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
谢谢
答案
最简单的方法是使用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)
首先$tempT
扩展为38459,然后Shell尝试运行带有两个参数38459
和/
的名为1000
的命令。这样您会看到消息38459: Command not found
。使用$((...))
进行算术扩展,但是shell不实现浮点算术,因此您必须使用awk
或bc
之类的其他工具。
另一答案
如果您的系统上有bc,我会使用它。
$ CELSIUS=$(bc -l <<< $(cat /sys/class/thermal/thermal_zone0/temp)/1000)
$ echo $CELSIUS
25.00000000000000000000
另一答案
TempC=$($tempT / 1000);
解析为:
TempC=$(38459 / 1000);
并且bash将$(...)
视为要传递到子shell的命令,因此它尝试运行无法找到的可执行文件38455
,因此会抱怨。
我会使用bc
,如@kinezan所建议的,尽管我个人更喜欢以下约定:
TempC=$(echo "scale=3; $tempT / 1000" | bc)
输出38.459
以上是关于无法获得命令输出的绝对值的主要内容,如果未能解决你的问题,请参考以下文章
BASH:百分比变化 - 如何计算?如何在没有bc的情况下获得绝对价值?
从绝对路径运行 cmd 无法识别 manage-bde 命令
关于pwd命令小技巧-确认当前工作目录的绝对路径中是否包含软链接目录名