コマンドライン引数をBashスクリプトに渡す方法
1. 概要
Linuxには、bashスクリプトにパラメーターを提供するための豊富で強力な方法のセットがあります。
このチュートリアルでは、これを行ういくつかの方法を見ていきます。
2. 引数リスト
引数は、スクリプトのファイル名に続くスペースで区切られたリストとして、実行中にbashスクリプトに渡すことができます。 これは、入力の値に応じてスクリプトがさまざまな機能を実行する必要がある場合に便利です。
たとえば、スクリプトstart.shにいくつかのパラメーターを渡してみましょう。
sh start.sh development 100
2.1. 一重引用符を使用する
入力リストにスペースで区切られた複数の単語で構成される引数がある場合、それらは一重引用符で囲む必要があります。
たとえば、上記の例で、渡される最初の引数がdevelopmentではなくdevelopmentmode の場合、一重引用符で囲み、‘として渡す必要があります。開発モード’:
sh start.sh 'development mode' 100
2.2. 二重引用符を使用する
評価が必要な引数は、入力として渡す前に二重引用符で囲む必要があります。
2つの引数を取るbashスクリプトcopyFile.shについて考えてみます。ファイル名とそれをコピーするディレクトリ:
sh copyFile.sh abc.txt "$HOME"
ここで、 $ HOME 変数がユーザーのホームディレクトリに評価され、評価された結果がスクリプトに渡されます。
2.3. 特殊文字のエスケープ
渡す必要のある引数に特殊文字が含まれている場合は、バックスラッシュでエスケープする必要があります。
sh printStrings.sh abc a@1 cd\$ 1\*2
文字$および*はセーフセットに属していないため、円記号でエスケープされます。
一重引用符、二重引用符、およびエスケープ文字を使用するためのこれらの規則は、後続のセクションでも同じです。
3. フラグ
引数は、フラグを使用してbashスクリプトに渡すこともできます。 これらのフラグは通常、ハイフンが前に付いた1文字の文字です。 フラグに対応する入力値は、スペースで区切られたフラグの横に指定されます。
次のユーザー登録スクリプトの例を考えてみましょう。userReg.shは、 username 、 full name、、ageの3つの引数を取ります。 :
sh userReg.sh -u abc -f Abc -a 25
ここで、スクリプトへの入力はフラグ( u 、 f 、 a )を使用して指定され、スクリプトはに基づいて対応する値をフェッチすることによってこの入力を処理します。旗。
4. 環境変数
Bashスクリプトは、環境変数の形式で引数を使用して渡すこともできます。 これは、次のいずれかの方法で実行できます。
- スクリプト実行コマンドの前に変数値を指定する
- 変数をエクスポートしてからスクリプトを実行する
次のスクリプトprocessor.sh、の例を見てみましょう。この例では、2つの変数var1とvar2を入力として受け取ります。
上記のように、これらの変数はスクリプトへの入力として提供できます。
var1=abc var2=c\#1 sh processor.sh
ここでは、同じコマンドでスクリプトの実行を呼び出す前に、まずvar1変数とvar2変数の値を指定しています。
var1とvar2を環境変数としてエクスポートし、スクリプトの実行を呼び出すことでも、同じことが実現できます。
export var1=abc
export var2=c\#1
sh processor.sh
5. 最後の引数演算子(!$ )
!$ によって参照される前のコマンドの最後の引数は、bashスクリプトへの引数として渡すこともできます。
再びファイルをコピーしていて、宛先がユーザーのホームディレクトリであると仮定しましょう。 最後の引数演算子を使用して、入力をスクリプトに渡すことができます。
cd $HOME
sh copyFile.sh abc.txt !$
最初のコマンドでは、ユーザーホームに移動し、2番目のコマンドが呼び出されると、!$ は、前のコマンドの最後の引数である $ HOME に評価されます。したがって、結果のコマンドは次のように評価されます。
sh copyFile.sh abc.txt $HOME
6. パイプオペレーター( | )
パイプ演算子(|)を xargs コマンドと組み合わせて使用すると、bashスクリプトに入力をフィードできます。
入力を文字列のリストとして受け取り、それらを出力するprintStrings.shスクリプトの前の例をもう一度見てみましょう。
これらの文字列をコマンドラインで引数として渡す代わりに、ファイル内に追加できます。 次に、パイプ演算子とxargsコマンドを使用して、このファイルを入力として使用できます。
cat abc.txt | xargs printStrings.sh
ここで、 cat コマンドは、ファイルに追加された文字列を出力します。 次に、これらはパイプ演算子を介して xargs コマンドに渡され、パイプ演算子はこのリストを収集してスクリプトに渡します。
7. 結論
結論として、実行時にコマンドライン引数をbashスクリプトに渡すさまざまな方法と、マルチワード引数、特殊文字を含む引数などのさまざまなタイプの入力を処理する必要がある方法を見てきました。