====== シェルスクリプトのオプション処理 ======
シェルスクリプトにオプションを追加したいことがある。[[https://linuxjm.osdn.jp/html/util-linux/man1/getopt.1.html|getopt]]やgetoptsもあるのだが、独自形式にしたければ自分で定義して書けばよい。
===== 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**が残った状態になる。
===== getopts無し =====
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