gpt4 book ai didi

ubuntu - 尝试使用 sed 将温度从传感器命令转换为数字

转载 作者:行者123 更新时间:2023-12-04 19:21:36 34 4
gpt4 key购买 nike

我有一个使用“tempmonitor”为 OS X 编写的脚本,我正在尝试将其转换为在 Ubuntu 下与 lm-sensors 一起使用。

这是原始 OS X 脚本,读取 XServe 入口上的环境传感器温度:

#!/bin/bash

/Users/admin/TemperatureMonitor.app/Contents/MacOS/tempmonitor -f -a -l | grep AMBIENT > /tmp/temperature.txt

filecontent=( `cat "/tmp/temperature.txt" `)

temp1=`echo "${filecontent[3]} * 10 "|bc | sed 's/[.].*//'`
temp2=`echo "${filecontent[10]} * 10 "|bc | sed 's/[.].*//'`


if (( $temp1 >= 900 || $temp2 >= 900 )); then
EMAIL="network.services@domain.com"
SUBJECT="MAIL01 INLET TEMPERATURE EXCEEDED!"
mail -s "$SUBJECT" "$EMAIL" < /tmp/temperature.txt
fi

今天早些时候,我改进了它以在几本 iBooks 上运行,将“临时”文件放入本地目录,而不是写入/tmp:
#!/bin/bash
# define output text file
OUTFILE='/Users/macadmin/batterysensortemp.txt'

# define email headers
SUBJECT="BATTERY TEMPERATURE EXCEEDED!"
RECIPIENTS="admin@domain.net"

# get the current battery sensor temperature and save it to a text file
/Users/macadmin/TemperatureMonitor.app/Contents/MacOS/tempmonitor -a -l | grep -i BATTERY > $OUTFILE

filecontent=(`cat $OUTFILE`)

temp1=`echo "${filecontent[1]}"|bc | sed 's/[.].*//'` #echo $temp1

if (( temp1 >= 33 )); then
mail -s "$SUBJECT" $RECIPIENTS < $OUTFILE
fi

所以,转向 Linux,特别是 Xubuntu 12.04,我安装了 lm-sensors。运行“传感器”命令时,这是我得到的输出:
acpitz-virtual-0
Adapter: Virtual device
temp1: +74.0°C (crit = +103.0°C)
temp2: +51.0°C (crit = +115.0°C)
temp3: +25.4°C (crit = +103.0°C)

现在以前,我只需要处理一个小数点,所以在读取每一行输出后,sed 代码如下:
temp1=`echo "${filecontent[1]}"|bc | sed 's/[.].*//'`

但在这里我需要去掉 + 号、度数符号、大写字母 C 以及导致大写 A 的任何原因。我尝试过:
temp1=`echo "${filecontent[1]}"|bc | sed 's/[+.°C].*//'`

但我收到错误:
(standard_in) 1: syntax error
(standard_in) 1: illegal character: \302
(standard_in) 1: illegal character: \260

我应该在 sed 脚本中添加什么来获得我想要的输出,即 740、510 和 254?还是我应该忘记编写自己的温度传感器通知脚本并找到其他东西(最终这就是它的用途)?

更新:有了这里的一些反馈,我在家用笔记本电脑上从头开始制作了一个新文件,运行 Sabayon 13.04:
#!/bin/bash

# define email headers
SUBJECT="LAPTOP SENSOR TEMPERATURE EXCEEDED!"
RECIPIENTS="john@net.net"

temp1=`sensors | grep -i temp3 | grep -o '+[0-9.]\+' | sed '1~2!d; s/+//'`
temp2=`echo "$temp1 * 10" | bc | sed 's/[.].*//'`

if (( temp2 >= 330 )); then
echo "EMAIL ALERT TRIGGERED!"
#mail -s "$SUBJECT" $RECIPIENTS < $OUTFILE
fi

变量 temp1 的结果为 24.0(摄氏度)。然后我可以将它乘以 10,得到 temp2 240,将其与 330 进行比较,因为它更凉爽,所以什么都不会触发。这也适用于 Xubuntu,无需修改!我认为我在垃圾字符方面遇到的问题可能归咎于 Windows 8 上的 Putty,而不是我在工作中使用的 Xubuntu 系统。谢谢大家的帮助和指点!

最佳答案

这仅输出数字:

sensors | grep -o '+[0-9.]\+' | sed '1~2!d; s/+//'

grep 部分只打印 + 前面的浮点数, 而 sed 部分删除每一第二行并删除 + .

关于ubuntu - 尝试使用 sed 将温度从传感器命令转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16743426/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com