我有一个使用“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 系统。谢谢大家的帮助和指点!