无法获得命令输出的绝对值

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不实现浮点算术,因此您必须使用awkbc之类的其他工具。

另一答案

如果您的系统上有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命令小技巧-确认当前工作目录的绝对路径中是否包含软链接目录名

Scilab - 如何在具有原始符号的矩阵中获得最大绝对值?

node rename绝对路径

HTML中img标签的src填本地绝对路径无法显示