【シェル】getoptsでオプションの取得 | プロサバメモ

WEBプログラミングやサーバ設定などのメモ場

【シェル】getoptsでオプションの取得

2016.03.032022.04.23

【シェル】getoptsでオプションの取得

シェルスクリプトへのオプションやオプションの値を取得します。
例)./hoge.sh -a -b value param

上記スクリプト実行時の -a -b value param の部分をhoge.sh内で捉えます。

-a は値なしのオプション。

-b は値有りのオプション。
値としてvalueを持ちます。

paramはシェルスクリプトへのパラメータ(引数)。

以下は hoge.sh の内容。(このソースを丸覚えしておくと良いかもしれません。)

#!/bin/sh

while getopts ab: OPT
do
        case $OPT in             #$OPTに指定したオプションが入る
                a) echo "A";;    #-aが指定された場合の動作を記述
                b) echo "B=$OPTARG";; #-bが指定された場合の動作を記述
                                      #$OPTARGには-bの値が入る
                \?) echo "Usage: $0 [-a] [-b value]" #-a -b以外のオプションが指定された場合
                    exit 1;;
        esac
done

shift `expr $OPTIND - 1` #位置パラメータ$1,$2...を正しく取得できるようにする

echo "$1" #位置パラメータ(スクリプトへの引数)が取得

getopts ab: の部分がこのスクリプトが受け入れるオプションの指定。

ab: の意味は、-a -b value を受け入れるということです。

abがそのまま -a -b に対応しています。

値ありオプションの場合は「:」(コロン)を指定します。

getopts a:b: とした場合は -a a_value -b b_value を受け入れるということです。

このスクリプトを実行すると以下のようになります。
-sh-4.2# ./hoge.sh -a -b value param
A
B=value
param

スクリプト最後の方の

shift `expr $OPTIND - 1`

は位置パラメータを正しく取得するためのお決まりの記述と思ってください。

後はなれるためにサンプルプログラムをいろいろ変えて動作を確かめてください。

動かしているうちにイメージがつかめると思います。

関連記事

TOP