引数は、特に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スクリプトに複数の引数を渡す構文は次のとおりです。
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スクリプトで配列を作成して利用できることを示します。