• ベストアンサー

シェルでsyntax errorがでてしまう

温度管理をするため、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というのが出て スクリプトが動かなくなってしまいました。 ログの書き込み部分は問題ないと思うのですが、原因がわかる方いらっしゃいますでしょうか。 ご指摘頂ければ幸いです。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

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

balvenie12
質問者

お礼

ヒアドキュメントの空白・・・まさにそのとおりでした! 終わりのENDの前に空白TAB(文書整形のため)が入っていたのですが これが原因だったようです。 ご指南ありがとうございました。

その他の回答 (2)

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.2

こちらの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 でいいのでは?

balvenie12
質問者

お礼

>usbrhの出力をメールで送りたいだけではないのですか? そのとおりです。 ご指南くださった mail -s $subject $address << END $rh END というのが正しいです。 早速修正して使わせて頂きました。ありがとうございます。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

差し替えて云々がとっても怪しいので、できれば 変更後のものを丸々提示してもらえませんか?

balvenie12
質問者

補足

興味を示していただきありがとうございます。 変更後のスクリプトをそのまま示します。改行、行間もそのままです。 気になる点がありましたらご指摘いただければ幸いです。 ----変更後のスクリプト---- #!/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 ---スクリプト終わり--- 宜しくお願いいたします。

関連するQ&A