いつも使っている 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 $?