目次

シェルスクリプトのオプション処理

シェルスクリプトにオプションを追加したいことがある。getoptやgetoptsもあるのだが、独自形式にしたければ自分で定義して書けばよい。

getopts使用例

getoptsを使う場合はこのような書き方になる。

test-getopts.sh
#!/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文字オプション以外にしたければ次のように書くこともできる。

test-optarg.sh
#!/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