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))