シェル/Bashスクリプトのコマンドライン引数[チュートリアル]
このチュートリアルでは、コマンドライン引数をbashスクリプトに渡す方法について説明します。始めるのに役立つ多くの例が含まれています。
Bash / Shellスクリプトは、Linuxワークフローを自動化し、勤務時間を短縮するための優れた方法です。これにより、早めにオフィスを離れることができます(または、午後5時になるまでサーバールームに隠れることができます)。
スクリプトを再利用可能にすると、スクリプトがより便利になります。異なる情報セットに対して、または異なる日に同じタスクを実行するスクリプトを作成する必要はありません。同じスクリプトを再利用して、異なるパラメータ<を提供できます。 / em> –コマンドラインを介してスクリプトに提供される命令。 これは、コマンドライン引数の使用とも呼ばれます 。
たとえば、テキストをファイルに出力するスクリプトがあるとします。ファイル名を変更したい場合は、スクリプトを編集する必要があります。スクリプトを複数のファイルに出力する場合は、手元にあるスクリプトの複数のコピーが必要になる場合があります。パラメータを使用すると、パラメータとして渡される、任意の名前の任意の数のファイルに出力できる単一のスクリプトを作成できます。 コマンドラインから。
これらのパラメータを渡すには、いくつかの方法があります。 –オプション とその値 –達成しようとしていることに応じて、スクリプトに。いくつかの方法と例を次に示します。
getopts /フラグコマンドライン入力の読み取り方法
- getopts オプションを取得するシェルコマンドです (またはフラグ )コマンドライン入力から、値を作成します (または引数 )スクリプトで使用できます
- オプションは、前に–(ダッシュ)が続き、その後に -v valueのように渡す値が続く1文字です。
- 注文が重要でない場合に最適です
- ここにリストされているすべての方法の中でおそらく最良の方法
getopts Bashスクリプトの例
このサンプルスクリプトは、ファーストフードの注文に対して3つのオプションを取ります。
- -o 注文
- -s サイズ
- -d 飲み物
fastFoodOrder.sh
#!/bin/bash # Use a while loop to parse through the options o, s, d while getopts o:s:d: flag do # Match each option (which has been assigned to the $flag variable) to it's meaning using a case statement block # OPTARG will be the value received from getopts for the corresponding option and is assigned to a variable depending on the flag case "${flag}" in o) order=${OPTARG};; s) size=${OPTARG};; d) drink=${OPTARG};; esac done # The values as passed to the options are now available in their corresponding variable echo "Order: $order"; echo "Size: $size"; echo "Drink: $drink";
#!/ bin / bash の詳細については、ここをクリックしてください bashスクリプトの先頭の行。
これを実行するには、次のように入力します。
bash ./fastFoodOrder.sh -d Cola -o 'Fish Burger Meal' -s Large
これにより、スクリプトが出力されます:
Order: Fish Burger Meal Size: Large Drink: Cola
上記の出力からわかるように、オプションが提供された順序は重要ではありませんでした。
スクリプトの実行時に./が使用されるのはなぜですか?
同じオプションに複数の値を渡す
複数の値に対してオプションを複数回渡すことも可能です。そうすると、それらはスクリプトで配列として使用できるようになります。
これは、値に任意の文字を使用できるため、単一のオプションに複数の値を渡すための最良の方法です。値を引用符で囲むか、区切り文字を使用すると、これが制限されます。
fastFoodOrderExtras.sh
#!/bin/bash # Use a while loop to parse through the options o, s, d, e while getopts o:s:d:e: flag do # Match each option (which has been assigned to the $flag variable) to it's meaning using a case statement block # OPTARG will be the value received from getopts for the corresponding option and is assigned to a variable depending on the flag case "${flag}" in o) order=${OPTARG};; s) size=${OPTARG};; d) drink=${OPTARG};; e) extras+=${OPTARG};;# Create or append an array variable to hold the multiple extras values passed esac done # The values as passed to the options are now available in their corresponding variable echo "Order: $order"; echo "Size: $size"; echo "Drink: $drink"; echo "The list of extras is '${extras[@]}'" # Loop through the multiple extras values for val in "${extras[@]}"; do echo $val done
上記のスクリプトは、複数の -eを受け入れます 以下に示すように、エクストラを追加するためのオプション:
bash ./fastFoodOrderExtras.sh -d Cola -o 'Fish Burger Meal' -s Large -e Sauce -e Salt -e Pepper
スクリプトは次のように出力します:
Order: Fish Burger Meal Size: Large Drink: Cola The list of extras is 'SauceSaltPepper' SauceSaltPepper
スクリプトでの位置パラメータの使用
- 特定の順序で既知の数の引数/パラメータがある場合に使用されます
- より単純なスクリプトに最適
例
fastFoodOrder.sh
#!/bin/bash echo "Order: $1"; echo "Size: $2"; echo "Drink: $3";
これを実行するには、次のように入力します。
bash ./fastFoodOrder.sh 'Fish Burger Meal' Large Cola
これにより、スクリプトが出力されます:
Order: Fish Burger Meal Size: Large Drink: Cola
オプションが順不同で提供された場合、値はすべて混同されることに注意してください。この方法を使用して位置が重要になります!
bash ./fastFoodOrder.sh 'Fish Burger Meal' Cola Large
値が正しく割り当てられない結果になります:
Order: Fish Burger Meal Size: Cola Drink: Large
ループを使用したコマンドラインパラメータの読み取り
- オプション/引数の数が事前にわからない場合に最適です
- たとえば、レシピの材料のリストを提供している場合があります
- 組み込み変数[email protected]、を使用します これには、ユーザーが指定したすべての入力オプションの配列が含まれています
例
recipe.sh
#!/bin/bash i=1; # This value is the iterator value - the current number of loops that have completed for ingredient in "[email protected]" # loop through [email protected] which is an array of all passed input parameters do echo "Ingredient number $i is $ingredient";# Print the $ingredient which was passed to the script when it was called i=$((i + 1)); # Increment the iterator value so we know how many times we have looped done
実行する:
sh ./recipe.sh bread lettuce cheese hamburger
どちらが出力されますか:
Ingredient number 1 is bread Ingredient number 2 is lettuce Ingredient number 3 is cheese Ingredient number 4 is hamburger
-
Linuxで効果的なBashスクリプトを作成するための10の便利なヒント
シェルスクリプトは、Linuxで学習/実行できるプログラミングの最も簡単な形式です。さらに言えば、タスクを自動化し、ほんの数例を挙げると、新しいシンプルなユーティリティ/ツールを開発するためのシステム管理に必要なスキルです。 この記事では、効果的で信頼性の高いbashスクリプトを作成するための10の便利で実用的なヒントを紹介します。これらには、次のものが含まれます。 1。スクリプトでは常にコメントを使用する これは、シェルスクリプトだけでなく、他のすべての種類のプログラミングにも適用される推奨される方法です。スクリプトにコメントを書くと、あなたや他の誰かがスクリプトを読んで、スクリプトのさ
-
Windows 10にBash(Linuxシェル)をインストールして使用する方法[チュートリアル]
WindowsでLinuxシェルを設定して使用する方法は次のとおりです– Linux用Windowsサブシステムを使用します ( WSL 。 このチュートリアルは、2020年以降の最新バージョンのWindows10を対象としています。古いソフトウェアを使用するべきではないため、古いバージョンのWindows10でWSLを使用する方法やWindows8/7 / XP/3.1の他の方法については説明しません。 Windowsを使用する必要がある場合は、セキュリティパッチをまだ受けているバージョンを使用してください! WSL は優れたツールであり、Linuxを離れたことがないかのよ