BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

シェル/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

ループを使用したコマンドラインパラメータの読み取り

  • オプション/引数の数が事前にわからない場合に最適です
    • たとえば、レシピの材料のリストを提供している場合があります
  • 組み込み変数admin@wsxdn.com、を使用します これには、ユーザーが指定したすべての入力オプションの配列が含まれています

recipe.sh

#!/bin/bash

i=1; # This value is the iterator value - the current number of loops that have completed

for ingredient in "admin@wsxdn.com" # loop through admin@wsxdn.com 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

  1. Linuxで効果的なBashスクリプトを作成するための10の便利なヒント

    シェルスクリプトは、Linuxで学習/実行できるプログラミングの最も簡単な形式です。さらに言えば、タスクを自動化し、ほんの数例を挙げると、新しいシンプルなユーティリティ/ツールを開発するためのシステム管理に必要なスキルです。 この記事では、効果的で信頼性の高いbashスクリプトを作成するための10の便利で実用的なヒントを紹介します。これらには、次のものが含まれます。 1。スクリプトでは常にコメントを使用する これは、シェルスクリプトだけでなく、他のすべての種類のプログラミングにも適用される推奨される方法です。スクリプトにコメントを書くと、あなたや他の誰かがスクリプトを読んで、スクリプトのさ

  2. Windows 10にBash(Linuxシェル)をインストールして使用する方法[チュートリアル]

    WindowsでLinuxシェルを設定して使用する方法は次のとおりです– Linux用Windowsサブシステムを使用します ( WSL 。 このチュートリアルは、2020年以降の最新バージョンのWindows10を対象としています。古いソフトウェアを使用するべきではないため、古いバージョンのWindows10でWSLを使用する方法やWindows8/7 / XP/3.1の他の方法については説明しません。 Windowsを使用する必要がある場合は、セキュリティパッチをまだ受けているバージョンを使用してください! WSL は優れたツールであり、Linuxを離れたことがないかのよ