getoptsの使い方例

ある雑誌に載っていた小さいシェルスクリプトだが、getoptsの使い方の例として素晴らしいのでここにメモしておく。

Usage: topless [-sh?]
top(1)のようにコマンドを一定間隔で実行する

#!/bin/sh

waitsec=1

while getopts s:h option ; do   #※1 getoptsの基本的な使い方
    case "$option" in
    s)
        waitsec=$OPTARG
        ;;
    h|\?)
        echo "topless [-s sec] command..."
        exit 0
        ;;
    esac
done
shift $(($OPTIND - 1))

case $# in                      #※2 /bin/shスクリプトではifよりcaseの方が速い
0)
    echo "you need a command to do"
    exit 1
    ;;
esac

clear
while : ; do
    echo -n "^[[1;1H"
    count=1
    $@ |
    while IFS= read line ; do   #※3 awkを使うよりwhile IFS= read lineの方が速い
        echo "$count    $line"
        count=$((1 + $count))
    done
    sleep $waitsec
done