1. ホーム
  2. linux

[解決済み] Bashシェルスクリプト - フラグをチェックし、その値を取得します。

2022-03-14 23:56:26

質問

このように実行されることを想定したシェルスクリプトを作ろうとしています。

script.sh -t application

まず、このスクリプトで、-t フラグを付けて実行されたかどうかをチェックしたいのです。例えば、このようにフラグなしで実行された場合、エラーにしたいのです。

script.sh

次に、-tフラグがあると仮定して、値を取得して変数に格納し、例えば次のようにスクリプトで使用できるようにしたい。

FLAG="application"

今のところ、私ができた唯一の進歩は、$@がすべてのコマンドライン引数をつかむことですが、これがフラグにどう関係するのか、あるいはこれが可能なのかどうかさえわかりません。

解決するには?

こちらをご覧ください。 ゲッツ チュートリアルをご覧ください。

を使った例 -a スイッチは、引数を必要とします。

#!/bin/bash

while getopts ":a:" opt; do
  case $opt in
    a)
      echo "-a was triggered, Parameter: $OPTARG" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done

greybotさんのおっしゃる通り( getopt != getopts ) :

外部コマンドgetopt(1)は、以下の場合を除き、決して安全に使用できるものではありません。 知っている はGNU getoptであり、GNU特有の方法でそれを呼び出すのです。 そして あなたは GETOPT_COMPATIBLE が環境変数にないこと。getoptsを使う(シェル を使うか、単純に位置パラメータをループさせるかです。