web-dev-qa-db-ja.com

$ 1と$ 2を含むbashスクリプトにカスタムコマンドオプションを含める方法は?

スクリプトがありますmyscript.sh

#!/bin/sh

echo $1 $2

のようなものを使用しています...

./myscript.sh foo bar

これは私に出力を与えます...

foo bar

しかし、このスクリプトにカスタムコマンドオプションを含めるにはどうすればよいですか?例えば ​​...

./myscript.sh -a foo and corespond to $1

そして

./myscript.sh -b bar and corespond to $2
3
Anonymous

使用するシェルとしてbashをリストしているので、次のように入力します。

$ help getopts

これは次のようなものを出力します:

getopts:getopts optstring name [arg]
解析オプションの引数。

Getoptsは、シェルプロシージャで位置パラメータをオプションとして解析するために使用されます。

OPTSTRINGには、認識されるオプション文字が含まれています。文字の後にコロンが続く場合、オプションには引数が必要であり、引数は空白で区切られている必要があります。

Getoptsは呼び出されるたびに、シェル変数$ nameに次のオプションを配置し、存在しない場合は名前を初期化し、処理される次の引数のインデックスをシェル変数OPTINDに入れます。 OPTINDは、シェルまたはシェルスクリプトが呼び出されるたびに1に初期化されます。オプションに引数が必要な場合、getoptsはその引数をシェル変数OPTARGに入れます。

Getoptsは通常、定位置パラメーター($ 0-$ 9)を解析しますが、引数がさらに指定されている場合は、代わりに解析されます。

関連:

  1. Getoptsチュートリアル。
  2. getoptsコマンドラインオプションを渡す方法
  3. bashでgetoptsを使用する方法
  4. Getopt、getopts、または手動解析?
2
Isaac

man 1 bash を使用する必要があります。

小さな例:

#!/bin/bash

while getopts "a:b:" opt      # get options for -a and -b ( ':' - option has an argument )
do
    case $opt in
        a) echo "Option a: $opt, argument: $OPTARG";;
        b) echo "Option b: $opt, argument: $OPTARG";;
    esac
done
4
Yurij Goncharuk