epgrecで使えるgrscanコマンド

epgrecは初期設定のinstall/step1.phpが動作する際、/usr/local/bin/grscanが存在すればチャンネルスキャンを行うinstall/grscan.phpが動作するが、grscanは日経Linux 2010年2月号に掲載されただけでWeb上には公開されていないみたいなので、grscan.phpを参考に/usr/local/bin/checksignalを5秒間実行してSNRが230以上のチャンネルのみ表示する同等のシェルスクリプトを作成してみた。尚、recdvb 1.2.0を想定しているのでrecpt1等では手直しが必要かと思われる。
UHFの13〜62chの50チャンネルを5秒間ずつスキャンするので、終了するまで50×5秒=4分10秒かかる。catvオプションを指定した場合はC13〜C63の51チャンネルが追加でスキャンされるので合計8分25秒かかる。受信可能かどうかを判別する最大SNRの値は個人的に試した環境によるものなので問題がある場合は該当箇所を書き換えれば良いかと思う。

#!/bin/sh
MAXCH=62
case $1 in
        catv) MAXCH=113 ;;
esac
OUTFLAG=0
CHANNEL=13
TMPFILE=`mktemp`
while [ $CHANNEL -le $MAXCH ]; do
        CHSTR=$CHANNEL
        if [ $CHANNEL -gt 62 ]; then
                CHSTR=C`expr $CHANNEL - 50`
        fi
        /usr/local/bin/checksignal $CHSTR >$TMPFILE 2>&1 &
        sleep 5
        kill -KILL $! >/dev/null 2>&1
        MAXSNR=0
        for SNR in `sed -n -e 's/^SNR: //p' $TMPFILE`; do
                if [ ${SNR} -gt $MAXSNR ]; then
                        MAXSNR=${SNR}
                fi
        done
        if [ $MAXSNR -ge 230 ]; then
                if [ $OUTFLAG -eq 0 ]; then
                        echo '<?php'
                        echo '$GR_CHANNEL_MAP = array('
                        OUTFLAG=1
                fi
                echo "\"GR$CHSTR\" => \"$CHSTR\","
        fi
        CHANNEL=`expr $CHANNEL + 1`
done
if [ $OUTFLAG -eq 1 ]; then
        echo ');'
        echo '?>'
fi