GNU/Linux >> Linux の 問題 >  >> Linux

Bash初心者シリーズ#3:Bashスクリプトへの引数の受け渡し

引数は、特にBashで役立つ場合があります!

これまで、変数を使用してbashスクリプトを動的かつ汎用的にする方法を学習したため、さまざまなデータやさまざまなユーザー入力に応答します。

このチュートリアルでは、コマンドラインからbashスクリプトに変数を渡す方法を学習します。

「LearnBashQuickly」電子書籍を購入する

bashシェルスクリプトに引数を渡す

次のスクリプトcount_lines.sh ユーザーが入力したファイルに存在する行の総数を出力します:

#!/bin/bash

echo -n "Please enter a filename: "
read filename
nlines=$(wc -l < $filename)

echo "There are $nlines lines in $filename"

たとえば、ユーザーはファイル/etc/passwdを入力できます。 その結果、スクリプトは行数を吐き出します:

このスクリプトは正常に機能します。ただし、はるかに優れた代替手段があります。

次のように、ユーザーにファイル名の入力を求める代わりに、スクリプトの実行中にコマンドライン引数としてファイル名を渡すようにすることができます。

./count_lines.sh /etc/passwd

最初のbash引数(位置パラメーターとも呼ばれます)は、$1を使用してbashスクリプト内でアクセスできます。 変数。

したがって、count_lines.shスクリプトでは、filename変数を$1に置き換えることができます。 次のように:

#!/bin/bash

nlines=$(wc -l < $1)
echo "There are $nlines lines in $1"

readおよびfirstechoコマンドも不要になったため、削除したことに注意してください。

最後に、スクリプトを実行して、任意のファイルを引数として渡すことができます。

./count_lines.sh    /etc/group
There are 73 lines in /etc/group
複数の引数をbashシェルスクリプトに渡す

bashスクリプトに複数の引数を渡すことができます。一般に、bashスクリプトに複数の引数を渡す構文は次のとおりです。

script.sh arg1 arg2 arg3  …

2番目の引数は$2によって参照されます 変数の場合、3番目の引数は$3によって参照されます 、..など

$0 変数には、疑問に思った場合に備えて、bashスクリプトの名前が含まれています!

これで、count_lines.shを編集できます 複数のファイルの行をカウントできるようにするbashスクリプト:

#!/bin/bash

n1=$(wc -l < $1)
n2=$(wc -l < $2)
n3=$(wc -l < $3)

echo "There are $n1 lines in $1"
echo "There are $n2 lines in $2"
echo "There are $n3 lines in $3"

これで、スクリプトを実行して、3つのファイルを引数としてbashスクリプトに渡すことができます。

ご覧のとおり、スクリプトは3つのファイルそれぞれの行数を出力します。もちろん、議論の順序が重要であることは言うまでもありません。

Bashシェルで引数を使用してクリエイティブにする

そこにはたくさんのLinuxコマンドがあります。

それらのいくつかは、長い構文または使用できるオプションの長い配列を持っている可能性があるため、少し複雑です。

幸い、bash引数を使用して、難しいコマンドを非常に簡単なタスクに変えることができます!

実例を示すために、次のfind.shを見てください。 bashスクリプト:

#!/bin/bash

find / -iname $1 2> /dev/null

これは非常に単純なスクリプトですが、非常に便利です。スクリプトの引数として任意のファイル名を指定すると、ファイルの場所が表示されます:

findコマンド全体を入力するよりも、これがはるかに簡単になっていることがわかります。これは、引数を使用して、Linuxの長く複雑なコマンドを単純なbashスクリプトに変換できることの証明です。

2> /dev/nullについて疑問がある場合 、これは、エラーメッセージ(ファイルにアクセスできないなど)が画面に表示されないことを意味します。 Linuxでのstderrリダイレクトについて読んで、このトピックに関する知識を深めることをお勧めします。

ボーナスのヒント:Bashシェルの特別な変数

Bashには、非常に便利で自由に使用できる特別な変数が多数組み込まれています。

次の表は、最も一般的な特別な組み込みbash変数を示しています。

特殊変数 説明
$ 0 bashスクリプトの名前。
$ 1、$ 2 ... $ n bashスクリプトの引数。
$$ 現在のシェルのプロセスID。
$# スクリプトに渡された引数の総数。
[email protected] スクリプトに渡されるすべての引数の値。
$? 最後に実行されたコマンドの終了ステータス。
$! 最後に実行されたコマンドのプロセスID。

これらの特別な変数の動作を確認するには、次のvariables.shを見てください bashスクリプト:

#!/bin/bash

echo "Name of the script: $0"
echo "Total number of arguments: $#"
echo "Values of all the arguments: [email protected]"

これで、必要な引数を渡してスクリプトを実行できます。

了解しました。これで、この章は終わりです。 bashの引数がいかに強力で有用であるかを理解していただければ幸いです。

練習が必要です。このPDFをダウンロードして、簡単なスクリプトの課題でbashスクリプトに引数を渡す練習をしてください。それらのソリューションも含まれています。

Bash第3章練習問題この章で学んだことを練習するための問題とその解決策Bash-Chapter-3-Practice-Questions-Linux-Handbook.pdf30KB

その後、次の章を見てください。ここでは、bashスクリプトで配列を作成して利用できることを示します。


Linux
  1. コマンドライン引数をBashスクリプトに渡しますか?

  2. Bashスクリプトに.shまたは.bash拡張子を使用しますか?

  3. jenkins パイプラインで bash コマンドを実行する

  1. Bashスクリプトでのエラー処理

  2. Bash初心者シリーズ#9:Bashでの関数の使用

  3. Bash初心者シリーズ#8:Bashのループ

  1. Bashスクリプトに引数とオプションを追加する

  2. VimでBashスクリプトを強調表示するには?

  3. bash スクリプトを使用した telnet セッションの自動化