bash メールアドレスの記載を確認して書き出す

vim check.sh

USER=$1
FILE_PATH=$2
SEND_SELF=$3
ADDRESS=()

#バックアップ
cp hogehoge hogehoge`date +%Y%m%d_%H%M%s`

for address in `cat $FILE_PATH`
do
    #アドレスのフォーマットになっているか
    if [ `echo "$address" | grep -E "[-_a-zA-Z0-9\.+]+@[-a-zA-Z0-9\.]+"` ]; then
        #日本語が含まれていないか
        if [ -n `echo "$address" | awk '$0 !~ /^[\001-\177]*$/'`] ; then
            ADDRESS+=(,$address)            
        else
            echo "$address includes multi-byte"
            continue
        fi
    else
        echo "$address is not format of address"
        continue
    fi
done

if [ -n "$ADDRESS" ]; then
    #アドレスの最初の配列の , を削除
    ADDRESS[0]=`echo "${ADDRESS[0]}" | cut -c 2-`
    #アドレスの配列の空白削除のためにIFS に空白を指定
    IFS=""
    if [ -n "$SEND_SELF" ]; then
        echo "$USER: \\$USER,${ADDRESS[*]}" >> hoge
    else
        echo "$USER: ${ADDRESS[*]}" >> hoge
    fi
fi

sh check.sh user hogehoge.txt
みたいな形で使う。