自分自身のファイル名に応じてスクリプトの動作を変える

よく似た動作のプログラムが複数必要な場合、1つのプログラムに
複数の名前のリンク作成し、呼び出された名前によってプログラムの
詳細な動作を変える方法をとることがある。
(例えばgnuzipはgzipへのリンクになっていることがある)
変数$0には実行中のスクリプトの名前がはいっているので
これを調べれば簡単に実現できる

#!/bin/sh
#animal.sh

#オプションが指定されていない場合、自分自身のスクリプト名から
#拡張子(.sh)を除いたものをオプションとして利用する
if [ -z "$1" ]; then
    opt=--`basename "$0" .sh`
else
    opt="$1"
fi

case "$opt" in
    --dog)
        bow="Bowwow, bowwow";;
    --cat)
        bow="Meow, meow";;
    --cow)
        bow="Moo, moo";;
    --pig)
        bow="Oink, oink";;
    *)
        bow="!?x, !?x"
esac
echo $bow
$ ./animal.sh --dog
Bowwow, bowwow

$ ln -s animal.sh cat.sh

$ ./cat.sh 
Meow, meow