#!/bin/sh
AFLAG=false
BFLAG=false
CFLAG=false
VALUE=
OPT=
while getopts abc: OPT
do
case $OPT in
a) AFLAG=TRUE ;;
b) BFLAG=TRUE ;;
c) CFLAG=TRUE
VALUE=$OPTARG ;;
\?) echo "Usage: $0 [-ab] [-c value] parameter" 1>&2
exit 1 ;;
esac
done
shift `expr $OPTIND - 1`
if [ "$AFLAG" = "TRUE" ]; then
echo "option a is specified."
fi
if [ "$BFLAG" = "TRUE" ]; then
echo "option b is specified."
fi
if [ "$CFLAG" = "TRUE" ]; then
echo "option c is specified, and VALUE is $VALUE"
fi
echo "parameter is $1"このコマンドで利用できるオプションはa、b、cです。
cオプションは値を指定するオプションでwhile getoputs c:というように:をつけます。
OPTはgetoptsコマンドが使用する変数です。
OPTにはコマンド行のオプションの値(ここではa, b,c)を順番に代入していきます。
-cがコマンド行に場合は、$OPTARGという変数にオプションに指定された値を代入します。
$OPTINDはオプション処理に関わった部分の次の文字列の位置を示します。
command -c xyz -b wwwww
option b is specified.
option c is specified, and VALUE is xyzであれば、$OPTARGは4となり、shift 3が実行されることになり、$1がwwwwwとなります。
#!/bin/sh
if [ "$1" = "-v" ]; then
VERBOSE=TRUE
shift
fi
for param in "$@"
do
echo $param
doneオプションが1つの場合は、getoptsコマンドを使わずに上記のようにも書けます。