tomyamaのブログ

日記・雑記。

シェルスクリプトのテンプレート

いつも使っている Shell Script のテンプレートです。

 

今はほとんどの環境でデフォルトのシェルは「bash」です。でも自分は枯れつくした「Bourne Shell」で動くように書いています。ですので、1行目は「#!/bin/sh」になっています。

 

どうしても配列を使いたいときは「bash」にすることを検討する前に、部分的にawkを呼び出すか、全てPerlで書くことを検討します。

 

 

#!/bin/sh
######################################################################
## XX -- XX Script
##
## - $Source$
## - Author: tomyama   Nov 202x
## - $Revision$
## - Only for personal use !
######################################################################

## script entry point
sh_main()
{
    sh_init "$@"

    echo "appname=\`$appname'"
    echo "apppath=\`$apppath'"
    echo "di_work=\`$di_work'"
    echo "version=\`$version'"

    parse_input "$@"

    for arg in "$@"; do
        printf "arg: \`%s'\n" "$arg"
    done
}

## script setup
sh_init()
{
    di_work="`pwd`"
    appname="`basename \"$0\"`"
    di_tmp="`dirname  \"$0\"`"
    cd "$di_tmp/"; apppath="`pwd`"; cd "$di_work/"
    unset di_tmp
    version=`grep '$[R]evision' "$apppath/$appname" | \
        sed 's/^.*$R/R/' | sed 's/ *\$$//'`
}

## argument analysis
parse_input()
{
    while [ 1 ]; do
        arg="$1"
        shift
        if [ $? -ne 0 ]; then
            break
        fi

        #echo $arg
        case "$arg" in
        '-v' | '--version')
            echo "$appname - version($version)"
            ;;
        '-h' | '--help')
            usage
            ;;
        '-'*)
            errp "$appname: \`$arg': unknown option"
            errp "`usage`"
            exit 1
            ;;
        *)
            ;;
        esac
    done
}

## error output
errp()
{
    echo "$@" 1>&2
}

## format indication
usage()
{
    echo "usage: $appname [-h|--help] [-v|--version]"
}

sh_main "$@"
exit $?