シェルスクリプトにオプションを追加したいことがある。getoptやgetoptsもあるのだが、独自形式にしたければ自分で定義して書けばよい。
getoptsを使う場合はこのような書き方になる。
#!/bin/sh
while getopts ab opt
do
case $opt in
a)
echo "Option -a"
;;
b)
file="$2"
echo "Option -b file=${file}"
shift
;;
*|-)
break
;;
esac
done
echo "file=${file}"
echo "args: $*"
オプション指定時にはこのようになる。
$ ./test-getopts.sh -a -b xxx yyy zzz Option -a Option -b file=-b Option -b file=xxx file=xxx args: xxx yyy zzz
オプション[-b]が2回呼び出されているものの、最終的には必要な変数設定ができている。
ただし、xxxがbreak条件にあたるので、xxxが残った状態になる。
1文字オプション以外にしたければ次のように書くこともできる。
#!/bin/sh
while [ -n "$1" ]
do
case "$1" in
-abc)
echo "Option -abc"
;;
-xyz)
file="$2"
echo "Option -xyz file=${file}"
shift
;;
*|--)
break
;;
esac
shift
done
echo "file=${file}"
echo "args: $*"
オプション指定時にはこのようになる。
$ ./test-optarg.sh -abc -xyz aaa bbb Option -abc Option -xyz file=aaa file=aaa args: bbb