プロが教える店舗&オフィスのセキュリティ対策術

1行ごとにユーザの情報が記述された内容を
日本語でユーザごとにメールしたいのです。

file.1の中身
01_hamada 1991/01/01 1st 10 01_hamada@メールアドレス
02_yoshida 1992/02/02 2st 20 02_yoshida@メールアドレス
03_satoshi 1993/03/03 3rd 30 03_satoshi@メールアドレス
04_kinosita 1994/04/04 4th 40 04_kinosita@メールアドレス

test.sh スクリプト
#!/bin/bash

while read line; do
DAY=`echo "$line" | awk '{print $2}'`
RANK=`echo "$line" | awk '{print $3}'`
POINT=`echo "$line" | awk '{print $4}'`
ADDRES=`echo "$line" | awk '{print $5}'`

mail -s test "$ADDRES" < messagebody.txt

done < file.1

messagebody.txtの中身
あなたがテストを受けた日は$DAYです。
順位は$RANKです。
点数は$POINTでした。

OSは
Red Hat Enterprise Linux ES release 4 (Nahant Update 4)
です。これでは日本語ファイルを絡めたスクリプトを
成立させることはできないのでしょうか

このままだと、文字化けして$DAY,$RANK,$POINTが
そのまま文字列として送信されてしまうのです。

なにか良い方法はないでしょうか

A 回答 (3件)

#です。

変数が展開されないだけでなく、日本語も文字化けすると言うことですか?
nkfがインストールされていれば、

while read DMY DAY RANK POINT ADDRESS
do
nkf <<ENDOFMAIL | mail -s test "$ADDRESS"
あなたがテストを受けた日は$DAYです。
順位は$RANKです。
点数は$POINTでした。
ENDOFMAIL
done < file.1

nkfが無ければ、
iconf -f 元のコード名 -t iso-2022-jp

この回答への補足

進捗ありです!!
#!/bin/bash
DAY=`echo "$line" | awk '{print $2}'`
RANK=`echo "$line" | awk '{print $3}'`
POINT=`echo "$line" | awk '{print $4}'`
ADDRES=`echo "$line" | awk '{print $5}'`

while read DAY RANK POINT ADDRESS
do

nkf <<ENDOFMAIL | mail -s test "$ADDRESS"
あなたがテストを受けた日は$DAYです。
順位は$RANKです。
点数は$POINTでした。
ENDOFMAIL
done < file.1
-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
このように変更したら以下の結果になりました。

あなたがテストを受けた日はrockです。
順位は1991/01/01です。
点数は1stでした。

あと少しがんばります!

補足日時:2009/08/07 23:59
    • good
    • 0
この回答へのお礼

nkfでうまくいきました!!
ありがとうございます。

でも$DAY,$RANK,$POINTの値が
全く認識されないのです

ダブルクォーテンション?や{}で囲んでも
半角で$DAYとしてもでもそのまま
文字列として出てきてしまいます。

あなたがテストを受けた日は$DAYです。
順位は""です。
点数は{}でした。

DAY=`echo "$line" | awk '{print $2}'`
この値も表示させる為には
どうしたらよいでしょうか

お礼日時:2009/08/07 23:28

>そのまま文字列として送信されてしまうのです。



そりゃそうです。messagebody.txt にそう書いてあるので。

while read DMY DAY RANK POINT ADDRESS
do
mail -s test "$ADDRESS" <<ENDOFMAIL
あなたがテストを受けた日は$DAYです。
順位は$RANKです。
点数は$POINTでした。
ENDOFMAIL
done < file.1
    • good
    • 0
この回答へのお礼

DMYがなんだかわかりませんが、
次の回答をいただいた内容で
日本語表示できましたっ
ありがとうございます。

お礼日時:2009/08/07 23:19

まず、いくつか、基本的なことを、あなたは、見落としています。



1 日本語を表現する文字コードとしては、JIS,Shift-JIS,EUC-JP,UTF-8の4つくらいが、メジャーに使われる文字コードです。あなたの環境・説明では、メールの原文は、なんという文字コードで記述することにしているのか、説明がありません。

2 e-mailの世界で、日本語のメッセージに使われるのは、通常、JIS(ISO-2022-JP)です。

3 mailコマンドに、生のテキストを放り込むだけでは、そのメールには、メッセージの文字コードを示すヘッダー情報が追加されません。ということは、デフォルトで、ASCIIの文字コードとみなすメールクライアントがほとんどですから、これは、文字化けします。
 (詳細は、RFC822wo読んでください)
    • good
    • 0
この回答へのお礼

ありがとうございます。
文字コードを指定する方法がわからなかったのです。
じわりと勉強してきます。

mailコマンドに一般的なShift-JISコードを指定した
テキストをリダイレクトする方法がわかれば文字化け
しないという認識でよろしいでしょうか。

お礼日時:2009/08/07 19:30

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