getoptsを使ってオプションを解析する

getopts は bash のビルトインコマンドで、オプションを解析する際に使われます。

このコマンドの形式は getopts optstring varname となります。

optstring にオプション文字列を指定します。

オプション文字列の先頭にコロン (:) を付けると、サポートされていないオプションを指定しても、エラーメッセージは標準エラーに出力されません。先頭にコロンをつけない場合は、エラーメッセージが出力されます。

オプションに値がある場合、オプション文字の後ろにコロンを付けます。 その値は変数 OPTARG に格納されます。

varname に解析時にオプションを格納する変数の名前を指定します。

下記の例では、-n オプションに値が必要とされます。

#!/bin/bash

show_usage() {
    echo "$(basename "$0") [OPTIONS] -- description"
    printf "\noptions:\n"
    echo "-h           display this help and exit"
    echo "-n <name>    specify a name"
}

name=""
while getopts ':hn:' option; do
    case $option in
        n)
            name=${OPTARG}
            echo "Your name: $name"
            ;;
        :)
            if [ -z "$name" ]; then
                echo "Must specify a name"
                exit 1
            fi
            ;;
        h|*)
            show_usage
            exit 0
            ;;
    esac
done
# オプションを指定していない場合
if [ $OPTIND -eq 1 ]; then
    show_usage
    exit 0
fi
# 解析されたすべてのオプションをずらす
shift $((OPTIND - 1))

Tags:

Updated: