getopts でシェルスクリプトの引数を処理2012年10月17日 13時30分38秒

シェルスクリプトでコマンドの引数を処理するのは getopts がいい。第一引数がオプションの指定で、追加の引数を取るときにはコロンを後に付ける。

使い方はほとんど雛型定型。


#!/bin/sh

while getopts a:b:c: flag
do
    case $flag in
        a)
            echo $flag "'$OPTARG'"
        ;;
        b)
            echo $flag "'$OPTARG'"
        ;;
        c)
            echo $flag "'$OPTARG'"
        ;;
        ?)
            echo $flag "'$OPTARG'"
        ;;
    esac
done

shift `expr $OPTIND - 1`

最後の shift で処理した分の引数を飛ばす。

セミコロンを指定したときには、必ず引数を与えなければいけない。そうしないとずれてしまう。もし、何も渡さないのであれば、二つのシングルクォートか、ダブルクォートを用いる。


sun $ sh getopts.sh -a AA -b -c CC
a 'AA'
b '-c'
sun $ sh getopts.sh -a AA -b '' -c CC
a 'AA'
b ''
c 'CC'