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

标签 ubuntu sed

我有一个使用“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/

相关文章:

string - 删除文件中的半唯一字符串

java - 在java上运行的Lame : err console log

linux - 删除除 Tab 之外的 ctrl 字符

shell - 两两反转文件中的行

linux - 我如何通过匹配上一行来用 sed 替换文本

linux - 使用 linux 将字符串 dd mm yyyy 转换为 yyyymmdd

linux - "libz.so.1: cannot open shared object file: No such file or directory"

java - 无法使用 Ubuntu 运行 Java GUI 程序

java - 触摸功能在 JDK1.8 的 Ubuntu 上不起作用

python - conda 更新 anaconda 失败 |破坏错误