Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 无法获取命令输出的绝对值_Linux_Bash_Shell_Terminal_Sh - Fatal编程技术网

Linux 无法获取命令输出的绝对值

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

因此,我想制作一个简单的脚本来不断检查我的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/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规范的一部分。