私のシェルへの入力は、次の署名に従う必要があります。
myscript.sh var1 var2 [-o var3] [-r var4]。
-o と -r はオプションの入力であり、これらのオプションは任意の場所 (var1 と var 2 の間、または開始/終了) で使用できますが、var 3 が指定されている場合、var3 は常に var4 より優先されます。また、var1 は var 2 に先行します。
#!/bin/bash
case "$#" in
([01]) echo "Usage: $0 var1 var2 [-o val3] [-r val4]" >&2; exit 1;;
esac
VAR1="$1"
VAR2="$2"
VAR3=
VAR4=
while getopts ":o:r:" opt; do
case $opt in
o)
VAR3=$OPTARG
;;
r)
VAR4=$OPTARG
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
shift $(( OPTIND - 1 ))
if [ -z "${VAR3+xxx}" ] && [ -z "${VAR4+xxx}" ];
then
echo $1 $2;
elif [ -z "${VAR3+xxx}" ];
then
echo $1 $2 $VAR4;
elif [ -z "${VAR4+xxx}" ];
then
echo $1 $2 $VAR3;
else
echo $1 $2 $VAR3 $VAR4;
fi
オプションの引数が var1 と var2 の間にある場合の処理方法