アプリ版:「スタンプのみでお礼する」機能のリリースについて

温度管理をするため、CentOS4.4上で下記のようなスクリプトを動かしています。

---スクリプト始まり---
#!/bin/bash
date=$(date '+%Y/%m/%d(%a)/%R')
rh=$(/var/usbrh/usbrh -1 2>&1)
limit=35
rh_judge=$(echo $rh | cut -c14-15)
if (( ${rh_judge} >= ${limit} )) ;then
alert=alert
else
unset alert
fi
echo ${date} ${rh} ${alert} >> /var/usbrh/usbrh_tes2.log
---スクリプト終わり---
このスクリプトで、ログを出力し、limit以上の数値になった場合、alertがログに書き込まれるようにできました。
そこでコレを少し改良してalert時にメールを飛ばせる様にしたいと思い下記のようにif文を差し替えました。

---if文始まり---
if (( ${rh_judge} >= ${limit} )) ;then
alert=alert
address="xxx@hogehoge.com"
subject="TemperatureAlert"

mail -s $subject $address << END
`$rh`
END
else
unset alert
fi
---if文終わり---

ところが、
echo ${date} ${rh} ${alert} >> /var/usbrh/usbrh_tes2.log
のあとの行(line23)で
line 23: syntax error: unexpected end of fileというのが出て
スクリプトが動かなくなってしまいました。

ログの書き込み部分は問題ないと思うのですが、原因がわかる方いらっしゃいますでしょうか。
ご指摘頂ければ幸いです。
宜しくお願いいたします。

A 回答 (3件)

気になるのは `$rh` かなぁ?


$rh に入っている文字列を, コマンドとして実行したいの? もしそうだとしても,
$rh | mail ...
の方が素直じゃないかなぁ.
あと, ヒアドキュメントを終わらせる END の前後に空白がないことも確認してください.
    • good
    • 2
この回答へのお礼

ヒアドキュメントの空白・・・まさにそのとおりでした!

終わりのENDの前に空白TAB(文書整形のため)が入っていたのですが
これが原因だったようです。
ご指南ありがとうございました。

お礼日時:2007/09/11 06:18

こちらのdebianにcopy&pasteして実行してみましたが,ine 23: syntax error: unexpected end of fileというエラーは出ませんでした.



rh=$(/var/usbrh/usbrh -1 2>&1)

mail -s $subject $address << END
`$rh`
END

ってのが怪しいですけどね.
usbrhコマンドの出力を変数rhに入れておいて,ヒアドキュメントの中で,rhの内容を実行していますが,正しい?
usbrhの出力をメールで送りたいだけではないのですか?

echo "$rh" |mail -s $subject $address
とか,

mail -s $subject $address << END
$rh
END
でいいのでは?
    • good
    • 0
この回答へのお礼

>usbrhの出力をメールで送りたいだけではないのですか?

そのとおりです。
ご指南くださった
mail -s $subject $address << END
$rh
END
というのが正しいです。
早速修正して使わせて頂きました。ありがとうございます。

お礼日時:2007/09/11 06:16

差し替えて云々がとっても怪しいので、できれば


変更後のものを丸々提示してもらえませんか?

この回答への補足

興味を示していただきありがとうございます。
変更後のスクリプトをそのまま示します。改行、行間もそのままです。
気になる点がありましたらご指摘いただければ幸いです。

----変更後のスクリプト----
#!/bin/bash
date=$(date '+%Y/%m/%d(%a)/%R')
rh=$(/var/usbrh/usbrh -1 2>&1)

limit=35
rh_judge=$(echo $rh | cut -c14-15)

if (( ${rh_judge} >= ${limit} )) ;then
alert=alert
address="xxx@hogehoge.com"
subject="TemperatureAlert"

mail -s $subject $address << END
`$rh`
END

else
unset alert
fi

echo ${date} ${rh} ${alert} >> /var/usbrh/usbrn_tes.log
---スクリプト終わり---

宜しくお願いいたします。

補足日時:2007/09/10 15:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!