shellスクリプトコマンドラインパラメータの概要


コマンドラインパラメータを使うには、shellスクリプトはスクリプトを実行する人と対話する必要があります。bashellは、コマンドラインパラメータをコマンドの後のデータ値に追加し、コマンドラインオプションを変更してコマンド行動の単文字値を変更します。
1、コマンドラインパラメータがshellスクリプトにデータを転送する最も基本的な方法はコマンドラインパラメータを使用することです。
1)入力したパラメータを読み出す変数は位置パラメータで、位置パラメータは標準数字で表されています。ここで$0はプログラム名で、$1は最初のパラメータで、$2は第二のパラメータで、$9が第九のパラメータであるまで順次類推します。shellスクリプトは、コマンドラインのパラメータを各位置変数に自動的に割り当てます。複数のパラメータを同時に入力する場合は、数値でもいいし、文字列でもいいです。スペースで区切らなければなりません。パラメータ値にスペースを含めるには、シングルクォーテーションまたはダブルクォーテーションを使用しなければなりません。したがって、任意のパラメータが使用できます。
2)プログラム名を読み出して変数$0に渡す文字列は、実際にはプログラムのパスです。呼び出し方法によって相対的か絶対的かを決定します。basenameコマンドを使用して、パスプレフィックスを削除して、プログラム名の中にスペースがあってはいけません。
3)スクリプトをテストします。スクリプトはパラメータを含むべきだと思っていますが、実際にデータがないとエラーが発生します。良い方法はパラメータをチェックすることで、パラメータを使用する前にデータが確実に存在することを保証します。例:if[Cn“$1”then.else.fi
2、特殊なパラメータ変数を使用してコマンドラインパラメータをトレースします。
1)パラメータカウントは、特殊変数を使用してスクリプトを実行する際に含まれるコマンドラインパラメータの個数をテストします。シナリオの中でいかなる位置でも使用できます。例:if[$i Cne 2]でパラメータの個数をテストできます。最後のコマンドラインパラメータを返します。パラメータがない場合は、$プログラム名として)
2)すべてのデータ変数を取得します。コマンドラインで提供されたすべてのパラメータを単語として処理します。複数のパラメータを一つのパラメータと見なします。変数@@は、コマンドラインに提供されるすべてのパラメータを、同じ文字列の複数の単語として処理します。値の反復を許可します。一般的にはforを使用します。異なるパラメータを分離します。
3、シフトシフトシフトシフトシフトシフトシフトシフトシフトシフトシフトシフトシフトシフトシフトシフトシフトシフトコマンドは、コマンドラインパラメータの相対位置を変更することができます。デフォルトでは、各パラメータ変数を位置変数0に左に移動します。$1を破棄します。回復しないように注意してください。)パラメータの数が不明な場合、これは反復パラメータの良い方法である。シフトシフトの変化を実現するために、シフトシフトシフトのパラメータを提供することができる。
4、処理オプションのオプションはダッシュによって案内された1文字で、コマンドを変更するための動作です。
1オプションを探してください。2)パラメータからオプションを分離してオプションとパラメータを同時に使う場合は--オプションリストの終了を指示します。発見--後、shellは普通パラメータと分かります。case処理オプションの使用を停止します。3)バンド値のオプションを処理してパラメータ値をフォローします。一つの方法はcaseの中でオプションに対応した後、シフトと読後のパラメータを使う方法です。より良い方法は以下の通りです。
2,getoptコマンドgetoptコマンドを使用するとオプションとパラメータを処理する時に便利です。パラメータを再組織して、1を解析しやすいようにします。コマンド形式getoptは任意の形式のオプションとパラメータリストを受け入れて、自動的にそれらを適切なフォーマットに変換します。コマンドの書式は、getopt options optstring parametersオプション文字列(opstring)コマンド行の有効オプション文字を定義するために使用されます。また、どのオプション文字がパラメータ値を必要としますか?2)スクリプトでgetoptを使用するには、setコマンドを使用して既存のコマンドラインオプションとパラメータをgetoptコマンドで生成したフォーマット形式に置き換える必要があります。オリジナルのスクリプトコマンド行のパラメータをgetoptコマンドに送る必要があります。そしてgetoptコマンドをsetコマンドに出力します。以下のようにします。set C`getopts Cq ab:cd''@''しかし、getoptコマンドは、スペースがあるパラメータ値をうまく処理できません。スペースをパラメータ区切り子として解析します。ダブルクォーテーションマークから生じる2つの値を一つのパラメータに結合するのではありません。解決策は以下の通りです。3)より上位のgetoptsコマンドgetoptsコマンドの順序は既存のshellパラメータ変数を処理し、呼び出しごとにコマンドで検出されたパラメータの一つだけを処理します。すべてのパラメータを処理したら、0より大きい終了状態で終了します。すべてのコマンドラインのパラメータフォーマットをループで解析するのに非常に適しています。getopts opt string variable$optargはパラメータ値が必要なオプションで使用する値を含みます。optingはgetopts停止処理時のパラメータリストの位置を含みます。注意:getopts処理時は、オプション前の-を削除しますので、対応するcaseにはダッシュは必要ありません。
良い特性:1)パラメータ値にスペース2を含めることができます。オプション文字とパラメータ値の間にスペースがなくてもいいです。3)コマンドラインで見つけられた未定義のオプションを単一の出力に結びつけます。
5、標準化のオプションは標準的な意味を持つアルファベットのオプションがあります。標準的な意味でオプションの意味を定義したほうがいいです。-a Cc Cd Cf Ch Ci Cn Co Cq Cr Cs Cv-x Cy
6、ユーザ入力を取得する実行中にスクリプトを実行する人の入力を取得する必要がある場合は、readコマンド1を使用して、標準入力または他のファイル記述子入力を受け付けます。読み込み後、標準変数にデータを入れます。p readコマンドラインで直接ヒントを指定することができます。複数の変数を指定することもできますが、reply環境変数に格納することを指定しないでください。2)タイミングは-tでタイマーを指定します。カウントがまだ入力されていません。readは0以外の終了状態を返します。入力された文字の個数を-nで指定し、所定の数に達したら自動的に入力を終了します。3)黙読使用-sで入力を端末に表示しない、例えばパスワードを入力します。例:コード例:
cat test | while read line