[bash]DHCP環境下のIPアドレスをcronで自動通知する (ubuntu 11.04 desktop編)


そういや最近自宅のKVMにVNC経由で動くubuntu 11.04 desktop をインストールしたのを思い出した (っ´∀`)っ ゃーですこんにちは。

この子もDHCPでIPアドレスを取ってくるのを思い出したので、ちょこっとPATHを変えるなどして改造してみました。ソースは以下の通り。
[cc lang='bash' ]
#!/bin/bash
LANG=C # 表示を英語にする (特定の言語環境に動作が左右されないようにするため)
TMPDIR=${HOME}/tmp # テンポラリディレクトリを指定
ADDRFILE=${TMPDIR}/IP_ADDR.txt # IPアドレス記録ファイルを指定
IFCONFIG=/sbin/ifconfig # ifconfigコマンドのフルパスを指定 (一般ユーザにはPATHが通っていないため)
EGREP=/bin/egrep # grepコマンドのフルパスを指定
AWK=/usr/bin/awk # awkコマンドのフルパスを指定
SED=/bin/sed # sedコマンドのフルパスを指定
UPCHK=$(${IFCONFIG} | ${EGREP} '(UP BROADCAST RUNNING MULTICAST)' > /dev/null 2>&1 ; echo $?) # ifconfigコマンドでUPステータスを捕まえる
MAIL=/usr/bin/mail # mailコマンドのフルパスを指定
MAILTO=oresama@example.com # 通知先メールアドレスを指定

[ ! -d ${TMPDIR} ]&& mkdir ${TMPDIR} # テンポラリディレクトリがなければ作成する

# ifconfigによる通知コマンドを関数化する
NOTIFYCMD()
{
${IFCONFIG} eth0 | ${EGREP} UP | ${AWK} '{print $1}' > /dev/null 2>&1 &&
${IFCONFIG} eth0 | ${EGREP} '(inet addr)' | ${AWK} '{print $2}' | ${SED} -e s/addr://g
}

# もしIPアドレス記録ファイルがなく、かつeth0が活性化されていたらメール通知し、IPアドレス記録ファイルを作成する
if [ ! -f ${ADDRFILE} -a 0 = ${UPCHK} ]
then
NOTIFYCMD | ${MAIL} -s "${HOSTNAME} IP Address" ${MAILTO}
NOTIFYCMD > ${ADDRFILE}
# (上の条件に合致しなかった場合)前回のIPアドレスから変更があればメール通知し、IPアドレス記録ファイルを更新する
elif [ ! $(cat ${ADDRFILE}) = $(NOTIFYCMD) ]
then
NOTIFYCMD | ${MAIL} -s "${HOSTNAME} IP Address" ${MAILTO}
NOTIFYCMD > ${ADDRFILE}
fi
[/cc]

こんだけです。そんでは、まーたー (っ´∀`)ノシ ねー♪