- ベストアンサー
シェルで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というのが出て スクリプトが動かなくなってしまいました。 ログの書き込み部分は問題ないと思うのですが、原因がわかる方いらっしゃいますでしょうか。 ご指摘頂ければ幸いです。 宜しくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
気になるのは `$rh` かなぁ? $rh に入っている文字列を, コマンドとして実行したいの? もしそうだとしても, $rh | mail ... の方が素直じゃないかなぁ. あと, ヒアドキュメントを終わらせる END の前後に空白がないことも確認してください.
その他の回答 (2)
- a-saitoh
- ベストアンサー率30% (524/1722)
こちらの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 でいいのでは?
お礼
>usbrhの出力をメールで送りたいだけではないのですか? そのとおりです。 ご指南くださった mail -s $subject $address << END $rh END というのが正しいです。 早速修正して使わせて頂きました。ありがとうございます。
- sakusaker7
- ベストアンサー率62% (800/1280)
差し替えて云々がとっても怪しいので、できれば 変更後のものを丸々提示してもらえませんか?
補足
興味を示していただきありがとうございます。 変更後のスクリプトをそのまま示します。改行、行間もそのままです。 気になる点がありましたらご指摘いただければ幸いです。 ----変更後のスクリプト---- #!/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 ---スクリプト終わり--- 宜しくお願いいたします。
お礼
ヒアドキュメントの空白・・・まさにそのとおりでした! 終わりのENDの前に空白TAB(文書整形のため)が入っていたのですが これが原因だったようです。 ご指南ありがとうございました。