logo

Linux Bash スクリプトの引数とパラメータを渡して解析する方法

引数を解析して bash スクリプト/シェル スクリプトに渡すことは、Bash スクリプト内の関数に引数を渡す方法と非常に似ています。引数をスクリプトに渡す実際のプロセスを確認し、スクリプト内でそれらの引数にアクセスする方法も見ていきます。

実行前に引数を渡す

bash インタープリター コマンドの実行中に、スクリプト名の直後にパラメーターを渡すことができます。パラメータまたは引数をファイルに渡すことができます。パラメーターの値をスクリプトに直接追加することで、スクリプトを通常どおり実行するためのコマンドです。すべてのパラメータは、シェル スクリプトに渡すスペース区切りの値です。



クエリセレクター
bash scriptname.sh>

上記のコマンドは、パラメーターを渡さずにスクリプトを実行するだけです。

一方、以下のコマンドは引数をスクリプトに渡します。

bash scriptname.sh parameter1 parameter2 parameter3 nth-parameter>

パラメータを渡して bash スクリプトを実行する



上のスクリーンショットは、スクリプトに渡されるパラメータとその実行方法を示しています。これについては次のセクションで説明します。しかし、現時点では、bash 環境変数を使用してスクリプトの外部からパラメータを渡していることがわかります。文字列やその他のデータ型も使用できますが、空白には注意してください。空白を使用すると、変数が別のパラメータになります。したがって、特に文字列の場合は、厳密に引用符で囲むように注意してください。

コマンドライン引数の検出

ここで、スクリプト内でこれらのパラメーターにアクセスする方法を見てみましょう。順番に渡されたパラメータの数を使用します。つまり、最初に渡されたパラメータについては、 を変数として使用してパラメータを解析(アクセス)します。最初のパラメータは 変数に保存されます。さらに、この変数を他の任意のユーザー定義変数に割り当てることができます。渡された n 番目のパラメーターについては、$n を使用してその特定のパラメーターにアクセスできます。ここでは、ファイル名/スクリプト名が 0 番目のパラメータであるため、変数名は 1 から始まります。パラメータが 9 つを超える場合は、括弧を使用しない場合と同様に数値の前後に { } を使用してください。bash は のみを として認識し、0 を除外します。そのため、単純に ではなく などを使用します。

#!/bin/bash echo '1st parameter =  ' echo '2nd Parameter =  '>

上記のスクリプトは、位置パラメータ (1、2、3 など) を使用してコマンド ライン/シェルからパラメータにアクセスできます。



スクリプトから引数にアクセスします。

ご覧のとおり、10 以降のパラメータ変数番号にアクセスするために {} を使用しました。このスクリプトは for ループと while ループでパラメーターを反復処理するために使用できますが、これについては後のセクションで説明します。

指定された引数を Bash 変数に割り当てる

また、これを他のカスタム変数に割り当てて、スクリプトをより動的にし、必要に応じて成形することもできます。上記のスクリプトを実行すると、2 つのパラメーターのみが出力されますが、数値のパラメーターの順序として変数を使用すると、より多くのパラメーターにアクセスできます。スクリプトはコマンド ラインから位置変数にアクセスし、スクリプト内の必要な場所で位置変数を使用できます。

#!/bin/bash a= b= p=$(($a*$b)) echo 'The product of $a and $b = $p'>

指定された引数を Bash 変数に割り当てる

上記のスクリプトは、位置パラメータ、つまりスクリプトに渡された と にアクセスし、後でアクセスしてそれに応じて変更できるようにユーザー定義変数を保存します。次のセクションで説明するように、反復メソッドを使用してより多くのパラメーターにアクセスすることもできます。

-z または -n フラグを使用して、渡された NULL または空のパラメーターをチェックする機能もあります。これにより、パラメータが渡されたかどうかを確認できます。

#!/bin/bash if [[ -z  ]]; then echo 'No parameter passed.' else echo 'Parameter passed = ' fi>

位置パラメータが渡されたかどうかを確認します。

シェルスクリプトのパラメータ

このスクリプトを使用すると、位置パラメータが渡されたか、何も渡されなかったかを検出できます。 -z フラグは、BASH 内の NULL 変数または初期化されていない変数をチェックします。 -z フラグは、渡された変数が NULL または初期化されていない場合に true を返します。したがって、基本的な If-else ステートメントを使用して、渡されたパラメーターを検出できます。

パラメーターが渡されない場合に true を返す -n フラグを使用することもできるので、! を使用する必要があります。状態を逆転させます。

Javaの参照変数

次のようなものです。

#!/bin/bash if [[ ! -n  ]]; then echo 'No parameter passed.' else echo 'Parameter passed = ' fi>

このスクリプトでも同じ出力が得られますが、-z の代わりに -n フラグを使用しています。

For または While ループを使用した複数の引数の読み取り

@ 変数を使用すると、コマンドライン経由でスクリプトに渡されるすべてのパラメータにアクセスできます。これは、BASH の変数の配列を保持する特別な変数です。この場合、これを単独で使用しているため、渡された位置パラメータの配列が含まれています。これを使用して、ループまたは while ループを使用して渡されたパラメータを反復処理することもできます。

#!/bin/bash for i in $@ do echo -e '$i
' done>

ループと @ 変数を使用して、配列要素としてパラメーターにアクセスします。

範囲ベースの for ループを使用して、@ 配列に要素が存在するまで繰り返しました。配列を反復処理して要素を出力するだけです。これを割り当て、値を変更し、パラメーターと引数に必要な変更を加えるだけで、スクリプトから望ましい結果が得られます。

または

while ループと BASH の環境変数を使用して引数を出力することもできます。

#!/bin/bash i=$(($#-1)) while [ $i -ge 0 ]; do echo ${BASH_ARGV[$i]} i=$((i-1)) done>

while ループを使用して、渡されたパラメーターを反復処理します。

変数「」を使用しています # ' 渡されたパラメーターの数を保持します。配列を使用して反復処理するので、パラメーターの数を初期化し、1 つを取り除きます。したがって、通常どおり、配列のインデックスは 0 から始まります。この配列は渡された最後の要素またはパラメータから初期化されるため、渡された順序ですべてのパラメータを出力するには、カウンタを 0 までデクリメントする必要があります。 BASH_ARGV 配列を使用してパラメータにアクセスし、その値を出力するだけです。また、反復ごとに、算術二重中括弧を使用して i- 反復子またはカウンターの値を 1 ずつ減らします。ここから、出力スクリーンショットに示されているように、while ループを使用してスクリプトに渡されたすべてのパラメーターを単純に出力します。

パラメータ名による読み取り

getopts を使用して引数とパラメーターを解析する

getopts プログラム/コマンドを使用すると、ループと switch-case ステートメントを使用して、コマンド ライン/ターミナルのスクリプトに渡された引数を解析できます。

#!/bin/bash while getopts n:c: option do case '${option}' in n)nation=${OPTARG};; c)code=${OPTARG};; esac done echo 'Nation : $nation' echo 'code : $code'>

getopts を使用して引数とパラメーターを解析する

getopts を使用すると、位置引数/パラメーターをコマンド ラインから bash 変数に直接割り当てることができます。これにより、パラメータを適切かつ体系的に管理できるようになります。上記のスクリプトでは、getopts 構文、while ループ、および switch-case ステートメントを使用して bash 変数を格納するために 2 つの引数を使用しました。

すべての引数の値を出力する

渡されたすべてのパラメータを格納するシンプルで強力な変数「@」を使用して、スクリプトに渡された引数を出力できます。

Java配列ソート
#!/bin/bash echo 'The arguments passed in are : $@'>

すべての引数の値を出力する

渡されたパラメータの数へのアクセス

変数「#」を使用して、コマンドラインから渡されたパラメータの数にアクセスすることもできます。 # 変数には基本的に、スクリプトに渡されるパラメータ/引数の数が含まれます。

#!/bin/bash echo 'The number of arguments passed in are : $#'>

渡されたパラメータの数へのアクセス

以下は、bash スクリプトで変数を渡して解析するプロセスと仕様です。変数をシフトおよび変更するロジックはユーザーが管理します。これは、引数をコマンド ラインからスクリプトに渡して解析して引数をより動的にするデモにすぎません。