0

「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

今日の初めに、/tmp に書き込むのではなく、「一時」ファイルをローカル ディレクトリに配置して、いくつかの iBook で実行できるように改良しました。

#!/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

必要な出力、つまり 740、510、および 254 を取得するには、sed スクリプトに何を入力する必要がありますか? それとも、独自の温度センサー通知スクリプトを作成するのを忘れて、何か他のものを見つける必要がありますか (最終的にはそれが目的なので)。

更新: ここでのフィードバックの一部を基に、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 でも機能しました。ガベージ文字で発生していた問題は、仕事で使用している Xubuntu システムではなく、Windows 8 の Putty に起因する可能性があると思います。ヘルプとポインタをありがとう!

4

3 に答える 3

1

これは数字のみを出力します:

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

grep 部分は が先行する浮動小数点数のみを表示しますが+、sed 部分は 2 行ごとに削除し、+.

于 2013-05-24T20:58:50.107 に答える
0

出力は、ISO 8859-1 として解釈される UTF-8 です。それが°の由来です。

を使用するsedと、おそらく次のように使用します。

sed 's/^.*:[^0-9]*+\([0-9]*\)\.\([0-9]\).*/\1\2/'

このパターンは、コロン、一連の非数字、プラス記号 ([-+]氷点下の温度を扱うことができる場合は、オプションで負の数も検索するために使用します) までのすべてを検索し、一連の数字を記憶し、ドットに一致します。 、そして別の数字を記憶し、その後に何かが続きます。それを記憶された数字に置き換えます。

于 2013-05-24T21:19:47.797 に答える
0

GNU シード

>sed -n '/^temp.*/ s/[.].*//;s/+//p' ファイル

temp1: 74
temp2: 51
temp3: 25
于 2013-05-24T21:24:15.343 に答える