getoptsを利用して引数を取得する(bashビルドイン)

今回利用するコマンドはgetoptsです。コマンドのgetoptsではありません。
getoptsは、bashのビルドインコマンドです。


スポンサーリンク

関連資料

bashビルドインのgetoptsについて

以下にgetoptsの使いかたを説明します。

getopts引数:先頭の:の意味

getopts ":abc"

先頭に:が存在する場合は、abc以外のオプションが来た場合のエラー処理を自ら記述することを意味します。

getopts引数:後ろの:の意味

後ろに:がある場合は、オプションの後ろに引数があるを指定します。

getopts "abf:"
#!/bin/bash
# filename: getopts-3.sh
while getopts "abf:" opts
do
  case $opts in
    a)
      echo a
      ;;
    b)
      echo b
      ;;
    f)
      TARGET_FILE=$OPTARG 
      ;;
  esac
done

if [ "$TARGET_FILE" != "" ]; then
  echo TARGET = $TARGET_FILE
fi

実行結果

$ ./getopts-3.sh -a -f foo.txt
a
TARGET = foo.txt
$ ./getopts-3.sh -fbar.txt
TARGET = bar.txt
$ ./getopts-3.sh -f
./getopts-3.sh: option requires an argument -- f

自分でエラー処理をする場合

先頭に:を付けることによりオプションのエラー処理を自ら記述しなけらばなりません。
以下に簡単なシェルスクリプト例と実行例を記述します。

#!/bin/bash
# filename: getopts-4.sh
while getopts ":af:" opts
do
  case $opts in
    a)
      echo a
      ;;
    f)
      TARGET_FILE=$OPTARG
      ;;
    :)
      echo "Option -$OPTARG requires an argument !!!" >&2
      ;;
    ¥?)
      echo "What is -$OPTARG option ???" >&2 
      ;;
  esac
done

if [ "$TARGET_FILE" != "" ]; then
  echo TARGET = $TARGET_FILE
fi

実行結果

getoptsの変数

getoptsには、以下の変数があります。

OPTARGの説明

OPTARGについては上記のサンプルシェルスクリプトで使用しています。
処理対象のオプションが格納されています。

OPTERRの説明

OPTERRの初期値は1になります。
この値を0にするとgetoptsからのエラー出力を抑止できます。
以下のサンプルシェルスクリプトで説明します。

#!/bin/bash
# filename: getopts-5.sh
echo Initial value: OPTERR=$OPTERR
while getopts "af" opts
do
  case $opts in
    a)
      echo a
      ;;
    f)
      OPTERR=0
      ;;
  esac
done

OPTINDの説明

OPTINDの値を表示する簡単なシェルスクリプト

#!/bin/bash
# filename: getopts-6.sh
while getopts "abc" opts
do
  case $opts in
    a)
      echo a
      ;;
    b)
      echo b
      ;;
    c)
      echo c
      ;;
  esac
  echo OPTIND value is $OPTIND
done

OPTINDを使う場面は以下のような場合です。

shiftコマンドによりgetoptsで処理されたオプションが消されsakuraだけが残ります。
したがって、getopts以外で使用する引数がある場合などは、OPTINDとshiftを使うことにより引数を残すことができます。
以下のように記述することもできます。

shift $((OPTIND-1))  # shift `expr $OPTIND - 1`

スポンサーリンク


添付ファイル: filegetopts-1.sh 880件 [詳細] filegetopts-4.sh 747件 [詳細] filegetopts-6.sh 769件 [詳細] filegetopts-7.sh 701件 [詳細] filegetopts-2.sh 705件 [詳細] filegetopts-3.sh 760件 [詳細] filegetopts-5.sh 687件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2025-03-15 (土) 08:19:03