指定されたプログラムがPATHに存在するか調べる

#!/bin/sh
#inpath.sh
#絶対パスでプログラムが指定された場合は、該当プログラムが存在するか確認し
#そうでない場合はPATHのディレクトリリストにプログラムが含まれているかを確認する

in_path(){
    #コマンド名とPATHを受け取りコマンドを探す
    #コマンドが見つかり実行可能であれば0を返し
    #そうでない場合は1を返す
    cmd=$1
    path=$2
    retval=1
    oldIFS=$IFS
    IFS=":"

    for directory in $path; do
        if [ -x $directory/$cmd ]; then
            retval=0
        fi
    done
    IFS=$oldIFS
    return $retval
}

checkForCmdInPath(){
    var=$1

    if [ "$var" != "" ]; then
        # ${var%${var#?}}は$varの1文字目を切り出している
        if [ "${var%${var#?}}" = "/" ]; then
            if [ ! -x $var ]; then
                return 1
            fi
        elif ! in_path $var $PATH ; then
            return 2
        fi
    fi
}

if [ $# -ne 1 ]; then
    echo "Usage: $0 command" >&2
    exit 1
fi
checkForCmdInPath "$1"
case $? in
    0) echo "$1 found in PATH" ;;
    1) echo "$1 not found or not executable" ;;
    2) echo "$1 not found in PATH" ;;
esac
exit 0
$ ./inpath.sh E
E not found in PATH

$ ./inpath.sh echo
echo found in PATH

$ ./inpath.sh /bin/echo
/bin/echo found in PATH

$ ./inpath.sh /home/echo
/home/echo not found or not executable