著者:麻生 二郎
小型コンピュータボードの最新機種「Raspberry Pi 4 Model B」が国内で発売できる状態になりました。Raspberry 4 Model Bは、高機能かつ高性能なハードウエアです。このラズパイが登場することでラズパイの適用範囲が広がりますが、同時に古いモデルが不要になります。いらなくなったラズパイを有効利用する三つの方法を紹介します。
シェルスクリプトマガジン Vol.63は以下のリンク先でご購入できます。![]()
![]()
図5 DMを一斉送信するシェルスクリプト(raspi_dm.sh)
#!/bin/sh
SOURCE_ADDRESS="自分のGmailアドレス"
DISTINATION_LIST="sendlist.txt"
USER_ID="Googleアカウントのユーザー名"
PASSWORD="Googleアカウントのパスワード"
MESSAGE_TEMPLATE_FILE="message.txt"
NUMBER_SEND=$(cat ${DISTINATION_LIST} | wc -l)
sed "s/%source_address%/${SOURCE_ADDRESS}/" ${MESSAGE_TEMPLATE_FILE} > /tmp/tmp_message.txt
for i in $(seq ${NUMBER_SEND})
do
DISTINATION_ADDRESS=$(sed -n ${i}p ${DISTINATION_LIST} | cut -f 1)
DISTINATION_NAME=$(sed -n ${i}p ${DISTINATION_LIST} | cut -f 2)
sed "s/%name%/${DISTINATION_NAME}/g" /tmp/tmp_message.txt | sed -e "s/%distination_address%/${DISTINATION_ADDRESS}/" > /tmp/message.txt
curl -s -k --url 'smtps://smtp.gmail.com:465' --mail-rcpt ${DISTINATION_ADDRESS} --mail-from ${SOURCE_ADDRESS} --user ${USER_ID}:${PASSWORD} --upload-file /tmp/message.txt
done
rm /tmp/tmp_message.txt /tmp/message.txt
図6 送信メッセージのテンプレートファイル(message.txt)
To: %distination_address%
From: %source_address%
Subject: 同窓会のご案内
Content-Type: text/plain; charset="UTF-8"
%name%
お元気ですか?
ご無沙汰しております。
早速ですが、下記の日程で同窓会を開催いたします。お手数をおかけしますが、出欠をメールにてご返信ください。%name%にお会いできるのを楽しみにしています。
記
日時:2019年11月30日(土曜日) 16時から
場所:〇〇〇高等学校 体育館
会費:5000円
以上
図7 送信先のメールアドレスと、個別に書き換えたい情報を保存し
たタブ区切りテキストファイル(sendlist.txt)
taro@example.co.jp シェルマグ太郎先生
hanako@example.com シェルマグ花子さん
jiro@example.com マガジン二郎君
図11 受信メッセージをLINEに転送するシェルスクリプト (raspi_mail_line.sh)
#!/bin/sh
POP_SERVER="pop.gmail.com"
USER_ID="Googleアカウントのユーザー名"
PASSWORD="Googleアカウントのパスワード"
LINE_TOKEN="LINE Notifyのアクセストークン"
SUBJECT_BASE64="44CQ6YeN6KaB44CR"
expect -c "
set timeout 30
spawn openssl s_client -connect ${POP_SERVER}:995
expect \"+OK Gpop ready\"
send \"user ${USER_ID}\n\"
expect \"+OK send PASS\"
send \"pass ${PASSWORD}\n\"
expect \"+OK Welcome.\"
send \"stat\n\"
expect \"+OK\"
send \"quit\n\"
expect \"+OK Farewell.\"
exit 0
" > receive.log
RECEIVE_COUNT=$(grep +OK receive.log |tail -n2 |head -n 1 | cut -d " " -f 2)
for i in $(seq ${RECEIVE_COUNT})
do
expect -c "
set timeout 30
spawn openssl s_client -connect ${POP_SERVER}:995
expect \"+OK Gpop ready\"
send \"user ${USER_ID}\n\"
expect \"+OK send PASS\"
send \"pass ${PASSWORD}\n\"
expect \"+OK Welcome.\"
send \"retr 1\n\"
expect \".\"
send \"quit\n\"
expect \"+OK Farewell.\"
exit 0
" > message.log
SUBJECT=$(cat message.log | grep "Subject: =" | sed "s/Subject: =?UTF-8?B?//g "| cut -c 1-16)
if [ ${SUBJECT} = ${SUBJECT_BASE64} ] ; then
cat message.log | awk '/Content-Language\: en-US/,/^\./' | head -n -1 | tail -n +2 > message.txt
curl -s -X POST -H "Authorization: Bearer ${LINE_TOKEN}" -F "message=$(cat message.txt)" https://notify-api.line.me/api/notify
fi
done
図5 エアコン制御のシェルスクリプト(raspi_aircon)
#!/bin/sh
case $1 in
"on" ) bto_advanced_USBIR_cmd -d $(cat /var/aircon/start.txt);;
"off" ) bto_advanced_USBIR_cmd -d $(cat /var/aircon/stop.txt);;
esac