初心者のための初心者のための唯一のBASHチュートリアルであるという点でユニークなBASHシリーズへの初心者ガイドの第2部へようこそ。
このガイドの読者は、私が自分の知識を蓄積するにつれて知識を蓄積し、それが終わったらうまくいけば、かなり巧妙なスクリプトを書くことができます。
先週、私は、単に "Hello World"という言葉を表示する最初のスクリプトを作成しました 。 テキストエディタ、ターミナルウィンドウのオープン方法、スクリプトの配置場所、 "Hello World"という単語の表示方法、引用符( "")などのエスケープ文字の細かい点などのテーマについて説明します。
今週は入力パラメータについて説明します。 この種のことを教える他のガイドがありますが、私は彼らがかなり低いレベルのものに飛び込み、あまりにも多くの情報を提供していることがわかります。
パラメータとは何ですか?
最後のチュートリアルの "Hello World"スクリプトでは、すべて静的でした。 スクリプトは実際にはあまり効果がありませんでした。
「Hello World」スクリプトをどのように改善できますか?
それを実行する人に挨拶するスクリプトはどうですか? "Hello World"と言うのではなく、 "Hello Gary"、 "Hello Tim"または "Hello Dolly"と言うでしょう。
入力パラメータを受け入れる機能がなければ、 "hellogary.sh"、 "hellotim.sh"、 "hellodolly.sh"の3つのスクリプトを書く必要があります。
スクリプトが入力パラメータを読み取れるようにすることで、1人のスクリプトを使用して誰にも挨拶することができます。
これを行うには、ターミナルウィンドウ(CTRL + ALT + T)を開き、次のように入力してスクリプトフォルダに移動します。( cdコマンドについて )
cdスクリプト次のように入力して、greetme.shという新しいスクリプトを作成します。( about touchコマンド )
touch greetme.sh以下のように入力して、お気に入りのエディタでスクリプトを開きます。( about nanoコマンドについて )
nano greetme.shnano内に次のテキストを入力します。
#!/ bin / bash echo "hello $ @"CTRLとOを押してファイルを保存し、CTRLとXを押してファイルを閉じます。
スクリプトを実行するには、あなたの名前に置き換えてコマンドラインに以下を入力します。
sh greetme.sh自分の名前でスクリプトを実行すると、 "Hello Gary"という単語が表示されます。
最初の行には、ファイルをbashスクリプトとして識別するための#!/ bin / bash行があります。
2行目はechoステートメントを使ってhelloという単語をエコーし、その後に奇妙な$ @表記があります。 ( エコーコマンドについて )
$ @は、スクリプト名とともに入力されたすべてのパラメータを表示するように展開します。 したがって、 "sh greetme.sh tim"と入力すると、 "hello tim"という単語が表示されます。 "greetme.sh tim smith"と入力すると、 "hello tim smith"という単語が表示されます。
greetme.shスクリプトが最初の名前だけを使ってこんにちはと言うのはいいかもしれません。 彼らが私に会ったときに誰も "こんにちはゲイリーニューエル"と言う人は、 "こんにちはゲイリー"と言うかもしれません。
最初のパラメータを使用するようにスクリプトを変更しましょう。 次のように入力して、nanoでgreetme.shスクリプトを開きます。
nano greetme.shスクリプトを次のように変更します。
#!/ bin / bash echo "hello $ 1"CTRLとOを押してスクリプトを保存し、CTRLとXを押して終了します。
以下のようにスクリプトを実行します(私の名前をあなたのものに置き換えてください):
sh greetme.sh gary newellスクリプトを実行すると、単に「hello gary」と表示されます(または、うまくいけば「こんにちは」など、あなたの名前が何であれ)。
$記号の後にある1は、基本的にechoコマンドに言います。最初のパラメータを使用します。 $ 1を$ 2に置き換えると、 "hello newell"(またはあなたの姓が何であれ)が表示されます。
ちなみに、$ 2を$ 3に置き換え、2つのパラメータでスクリプトを実行すると、出力は単純に "Hello"になります。
実際に入力されたパラメータの数を表示して処理することは可能ですが、後のチュートリアルでは、検証のためにパラメータ数を使用する方法を示します。
入力したパラメータの数を表示するには、greetme.shスクリプト(nano greetme.sh)を開き、次のようにテキストを修正します。
#!/ bin / bash echo "$#namesを入力しました" echo "hello $ @"CTRLとOを押してスクリプトを保存し、CTRLとXを押してnanoを終了します。
2行目の$#は、入力されたパラメータの数を表示します。
これまでのところ、すべてが斬新ではありましたが、あまり有用ではありません。 単に「こんにちは」と表示されるスクリプトが必要なのは誰ですか?
echoステートメントの実際の使用法は、冗長で意味のある出力をユーザーに提供することです。 深刻な番号の処理やファイルやフォルダの操作が複雑な何かをしたいと思うのであれば、どのようなことが起こっているのかをユーザに表示すると便利です。
対照的に、入力パラメータはスクリプトを対話的にします。 入力パラメータがなければ、非常に似たようなことをする数十種類のスクリプトが必要になりますが、名前は若干異なります。
これを念頭に置いて、他にも便利な入力パラメータがあり、それを知っておくことをお勧めします。これらをすべて1つのコードスニペットに含めます。
greetme.shスクリプトを開き、次のように修正してください:
#!/ bin / bash echo "ファイル名:$ 0" echo "プロセスID:$$" echo "---------------------------- ---あなたが入力した "echo" $#names "echo" hello $ @ "CTRLとOを押してファイルを保存し、CTRLとXを押して終了します。
今すぐスクリプトを実行します(あなたの名前に置き換えてください)。
sh greetme.sh今回は、次のスクリプトが表示されます。
ファイル名:greetme.shプロセスID:18595 ------------------------------ 2つの名前を入力しましたhello gary newellスクリプトの最初の行にある$ 0は、実行しているスクリプトの名前を表示します。 それはドルのゼロであり、ドルのゼロではないことに注意してください。
2行目の$$には、実行しているスクリプトのプロセスIDが表示されます。 なぜこれは役に立ちますか? フォアグラウンドでスクリプトを実行している場合は、CTRLとCを押すだけでキャンセルすることができます。バックグラウンドでスクリプトを実行してループを開始し、何度も同じことをやり直すか、それを殺すために。
バックグラウンドで実行されているスクリプトを強制終了するには、スクリプトのプロセスIDが必要です。 スクリプトが出力の一部としてプロセスIDを与えた場合、それは良いことではないでしょうか。 ( psとkillコマンドについて )
最後に、このトピックを終了する前に、出力がどこに行くのかについて議論したいと思っていました。 これまでにスクリプトが実行されるたびに、出力が画面に表示されました。
スクリプト出力を出力ファイルに書き込むのはよくあることです。 これを行うには、次のようにスクリプトを実行します。
sh greetme.sh gary> greetme.log上記のコマンドの>記号は、greetme.logというファイルに "hello gary"というテキストを出力します。
>記号を使用してスクリプトを実行するたびに、出力ファイルの内容が上書きされます。 ファイルに追加したい場合は、> with >>を置き換えます。
概要
これで、画面にテキストを書き込んで入力パラメータを受け入れることができます。