.." />

道具としてのコンピュータ

2012年5月8日
さくらのVPSを使ってシェルプログラミングをしてみよう! Labunixさんからの投稿


先般から何回かにわたってへなちょこプログラミングを掲載してまいりましたが、
実は裏で何名かのエンジニアの方にサポートをしていただいておりまして、
わからないことがあると彼らに質問をしておりました。

しかし、いろいろと回答をもらうのですが、何を書いているのかちんぷんかんぷん。
自分のアホさを呪うしかありません(というか前提となる知識が全く違うんだなということがよくわかりました)

さて、その先生方の うちの一人、Labunixさん(もう、ハンドルからして、unixへの愛が…)が、
今回のスクリプトの模範解答(だと思う)を晒してくれました。ありがとうございます。


で、スクリプトに突っ込みどころを残しておいたから、ということなのですが、
レベルが高すぎて、もはやどこを突っ込んでいいのかさえ、わかりません(涙目)。
うち文系じゃけん…。
(お前、USP MAGAZINE元編集長として、恥ずかしくないのかっ)
(いえいえ、それとこれとは話が別です)

尊敬の意を込めて、Lubunixさんのスクリプトを掲載します。

#!/bin/bash -xv

# ANTENNA.sh

set -e
# プロキシ用
test -x /etc/profile && . /etc/profile
# ログ設定
logdir=/tmp/ANTENA
test -d $logdir || mkdir $logdir
exec 2> $logdir/log
logfile=${logdir}/$0.log
#ホームディレクトリ
homedir=~/ANTENA
#日付の取得 yyyymmdd
today=$(env LANG=C date ‘+%Y%m%d’)
yday=$(env LANG=C date ‘+%Y%m%d’ –date “1 days ago”)
# ディレクトリチェック
listd=$homedir/LIST
datd=$homedir/MD5
test -d “$listd” || mkdir -p “$listd”
test -d “$datd” || mkdir -p “$datd”
test -d “$listd” || exit 1
test -d “$datd” || exit 1

test -f “$listd/URLLIST” || touch “$listd/URLLIST”
# URL リストをまだ作ってない?
COUNT=`wc -l ${listd}/URLLIST | awk ‘{print $1}’`
if [ “$COUNT” -eq 0 ];then
echo -e “Please input $listd/URLLISTnSitename URL”
echo “空白は区切り文字ですのでSitenameとURLでは使えません。”
echo “EXAMPLE: グーグル http://google.co.jp/
exit 1
fi

test -f $datd/$yday || touch $datd/$yday
# for debug rm today’s file
test -f $datd/$today && rm $datd/$today
test -f $datd/$today || touch $datd/$today
#本日分のデータ作成
for line in `awk ‘{print $2}’ “$listd/URLLIST”`;
do
w3m -dump $line | head -c 100 |
md5sum | awk ‘{print “”‘”${line}”‘” “$1}’ >> $datd/$today ;done
#昨日のデータと比較 エラーがあったらメールを送信
if diff $datd/$yday $datd/$today > “$logfile” ;
then
echo “変化無しなので何もしない”;
else
echo “変化有りだからメール送信”;
# for debug stdout
awk ‘{print $2}’ “$logfile” #| mail -s “MAIL_FROM_WEBANTENNA” `whoami`
awk ‘{print $2}’ “$logfile” | mail -s “MAIL_FROM_WEBANTENNA” `whoami`
fi
# 削除処理
grep . $logdir/* | mail -s “exec log” root
rm -fr $logdir
# 後処理
unset logdir logfile homedir today yday listd datd COUNT
exit 0

いちいちtestコマンドでディレクトリの有無を確認したりだとか、
後処理でunsetしていたりだとか、
ログをrootに送っていたりとか、細やかな気遣いがいろいろとあって、
比較すると私のスクリプトがどれだけザルかがわかりますね。
勉強になりやした。 ありがとうございます。

投稿お待ちしております!(こういうネタ、USP MAGAZINEで拾ってくださいな!)

Related Posts