Bash でコマンド ライン引数を処理する方法は?

Bash Dekomando Rain Yin Shuwo Chu Lisuru Fang Faha



Linux では、bash スクリプトの入力としてコマンドライン引数を使用します。 Bash は、こ​​れらのコマンドライン引数を順番に受け取り、オプションとして解析できます。これらの引数を使用すると、アクションとスクリプトの出力に動的に影響を与えることができます。

これらの引数を別々に構成して、入力と出力に影響を与えることができます。そのため、bash でコマンドライン引数を処理することが不可欠ですが、多くの新しいユーザーはその方法を学ぶ必要があります。したがって、このガイドでは、bash でコマンドライン引数を処理するさまざまな方法について説明します。







Bash でコマンド ライン引数を処理する方法は?

Bash でコマンド ライン引数を処理するにはさまざまな方法があるため、簡単な情報を得るためにそれらを見てみましょう。



getopt 関数



getopt 関数は、bash で引数を定義および解析するためのオプションと構文を提供するので便利です。これは、引数に基づいて特定の形式でデータベース ファイルまたはレポートを作成する際に使用できる Linux の組み込み関数です。次の 2 種類の引数があるため、getopt 関数は短いコマンド ライン引数の解析に役立ちます。





  • 短い引数: これらは、ハイフンが後に続く 1 文字の引数です。たとえば、-a、-l、-h などは単一引数の例です。

  • 長い引数: これらは複数文字の引数で、その後に 2 つのハイフンが続きます。 –all、–list、–help など、長い引数のさまざまな例があります。

getopt ユーティリティを使用してコマンド ライン引数を処理する例を見てみましょう。次の情報を含む「getopt.sh」という名前の bash スクリプトを作成しました。



!/ 置き場 / バッシュ

その間 getopts 'あいうえお:' 詳細; 行う

場合 ' $詳細 '

)

エコー 「市民名は $OPTARG ' ;;

B )

エコー 「市民IDは $OPTARG ' ;;

C )

エコー 「出身地は $OPTARG ' ;;

D )

エコー 「職業は $OPTARG ' ;;

* )

出口 1 ;;

エサック

終わり

シフト ' $(($OPTING -1) )'



もしも [ ! -と $1 ] ; それから

エコー 「婚姻状況 $1」

そうしないと

エコー 「エントリーなし」

出口 1

なれ



もしも [ ! -と $2 ] ; それから

エコー 「家族 $2」

なれ

入力に必要な引数を指定してスクリプトを実行しましょう。

上の画像でわかるように、getopt 関数のみを使用してスクリプトを実行し、通常の引数を追加して完全な結果を取得します。

フラグの使用

フラグは、ハイフン (-) が前に付いた単一の文字に他なりません。 getopt 関数を使用して引数を渡すときは、フラグを使用します。 -a、-b、-c はフラグの例です。たとえば、スクリプトには市民の名前、ID、場所、年齢、職業が必要です。したがって、フラグ j、k、l、m、n を使用して、市民の名前、ID、場所、年齢、および職業を同時に定義します。

#!/ビン/バッシュ

その間 getopts j:k:l:m:n: flag_info

行う

場合 ' ${flag_info} '
< オール >
< それ > j ) 市民名 = ${OPTARG} ;; それ >
< それ > k ) シチズン ID = ${OPTARG} ;; それ >
< それ > l ) 場所 = ${OPTARG} ;; それ >
< それ > メートル ) = ${OPTARG} ;; それ >
< それ > n ) 職業 = ${OPTARG} ;; それ >
オール >
エサック

終わり

エコー 「入力された詳細は次のとおりです。」

エコー 「市民名: $citizenname ' ;

エコー 「市民ID: $citizenid ' ;

エコー '場所: $場所 ' ;

エコー '年: $年齢 ' ;

エコー '職業: $職業 ' ;

スクリプトは、ターミナルに次の結果を表示します。

. /< 脚本 > .sh -j ダニー -k 476 -l Toronto -m 25 -n 著者

使用する [メール保護] ループ付き

「 [メール保護] 」変数は、すべての入力引数の配列に他なりません。 「」を使用して、任意の数の入力を渡すことができます [メール保護] ' 変数。この変数をループとして使用して、引数を反復処理できます。 「 [メール保護] その場合、変数が役立ちます。入力サイズがわからず、位置引数を取ることができません。したがって、「 [メール保護] 」 getopt 関数を何度も定義するのではなく、これはループと [メール保護] スクリプトで一緒に:

#!/ビン/バッシュ

一つに = ( 「$ @ )



もしも [ $# -gt 1 ]

それから



追加 =$ ( ( ${num[0]} + ${num[1]} ) )

エコー 「すべての数の足し算は次のとおりです。 $追加 '



引き算 =$ ( ( ${num[0]} - ${num[1]} - ${num[2]} ) )

エコー 「数の減算は次のとおりです。 $減算 '



かける =$ ( ( ${num[0]} * ${num[1]} * ${num[2]} ) )

エコー 「数の掛け算は次のとおりです。 $乗算 '



部門1 =$ ( ( ${num[0]} / ${num[1]} ) )

エコー 「の分割 ${num[0]} ${num[1]} は: $division1 '



部門2 =$ ( ( ${num[1]} / ${num[2]} ) )

エコー 「の分割 ${num[1]} ${num[2]} は: $division2 '



部門3 =$ ( ( ${num[0]} / ${num[2]} ) )

エコー 「の分割 ${num[0]} ${num[2]} は: $division2 '



なれ

上記のスクリプトは、コマンドライン引数に基づいてさまざまな算術計算を実行します。たとえば、入力として 50、35、および 15 を入力しました。

定位置パラメーターの使用

最初に $1 にアクセスし、次に $2 にアクセスするなど、位置パラメータにアクセスできます。たとえば、最初の引数として名前を読み取り、2 番目の引数として都市を読み取るスクリプトを作成してみましょう。ただし、最初に都市を渡してから名前を渡すと、名前が都市と見なされ、その逆も同様です。この概念を理解するために、次のスクリプトを詳しく見てみましょう。

#!/ビン/バッシュ

エコー 「入力内容はこちら」

エコー 「名前 $1」

エコー 「都市 $2」

ターミナルでスクリプトを実行するときに、名前と都市を追加する必要があります。

まとめ

これは、bash でコマンド ライン引数を処理する方法について知っておく必要があるすべてです。適切な例を使用して試すことができるさまざまなアプローチについて説明しました。スクリプトに引数を追加する場合は、さまざまなコマンドがあります。そのため、必ず Linuxhint にアクセスして、それらについて詳しく学んでください。