シェルスクリプト、特にBashスクリプトは、システムでの反復的または面倒なタスクを自動化するための優れた方法です。ハンズフリーでスクリプトをスケジュールして実行できるのに、なぜ入力するのですか?多くのスクリプト構造の1つは、ループです。ループとは、データを取得するかデータを生成し、データに対して何らかの操作を実行してから、何らかの条件が満たされるか、スクリプトが中断されるか、入力データがなくなるまで、プロセスを最初からやり直すコードのセクションです。 Bashスクリプトを使用する場合、何らかの形式のループを使用してアクションを実行すると便利な場合があります。
[読者も気に入っています:bashでリダイレクト演算子を使用する5つの方法]
Bashスクリプトの基本的なループコマンドはfor
です。 およびwhile
。
-
for
ループは通常、一連の数字、アイテムのリスト、カウンターなど、既知の有限のリストがある場合に使用されます。 -
while
ループはリストで使用できますが、しない条件にも役立ちます。 既知の制限があります。これを使用して、コマンドを実行できます while 条件が真である(またはロジックを反転して、条件が偽のときに実行する)。
したがって、(しゃれを意図した)ループを実行する方法はいくつかありますが、この記事では、while
を使用した例に焦点を当てます。 ループします。
1。単純なwhileループ
巨大なアプリケーションをインストールしていて、最終的にファイルシステムのスペースを使いすぎるのではないかと心配していると想像してみてください。
df
を実行する代わりに 別の端末で、簡単なコマンドを実行して、ディスク使用率を毎秒監視できます。これにより、インストールプロセスが制限に達することがわかった場合に、インストールプロセスを中断できます。
while true
do
df -k | grep home
sleep 1
done
この場合、 trueでループを実行しています 状態。これは、永久に実行されるか、CTRL-Cを押すまで実行されることを意味します。 したがって、注意を払う必要があります(そうしないと、システムのリソースを引き続き使用します)。
注 :このようなループを使用する場合は、sleep
のようなコマンドを含める必要があります 実行の合間にシステムに息を吹き込む時間を与えるため。特にループ内のコマンドにI/O操作が含まれる場合、ノンストップで何かを実行すると、パフォーマンスの問題になる可能性があります。
2。条件が真になるのを待っています
このシナリオにはさまざまなバリエーションがあります。たとえば、ある時点でプロセスがディレクトリを作成し、その瞬間を待って他の検証を実行することを知っています。
while
を使用できます ループしてそのディレクトリの存在をチェックし続け、ディレクトリが存在しないときにのみメッセージを書き込みます。
より複雑なことをしたい場合は、スクリプトを作成して、ループ条件が真になったことをより明確に示すことができます。
#!/bin/bash
while [ ! -d directory_expected ]
do
echo "`date` - Still waiting"
sleep 1
done
echo "DIRECTORY IS THERE!!!"
3。 whileループを使用してファイルを操作する
while
のもう1つの便利なアプリケーション ループはそれをread
と組み合わせることです テキストファイルから列(またはフィールド)にすばやくアクセスし、それらに対していくつかのアクションを実行するコマンド。
次の例では、予測可能な形式のテキストファイルから列を選択し、/etc/hosts
に入力するために使用する値を出力しているだけです。 ファイル。
ここでは、ファイルにスペースまたはタブで区切られた列があり、がないことを前提としています。 列のコンテンツのスペース。これにより、フィールドの内容がシフトし、必要なものが得られない可能性があります。
情報を抽出して操作するための単純な操作を実行しているだけであり、コマンドの再利用性については気にしないことに注意してください。私はこれをそれらの「迅速で汚いトリック」の1つとして分類します。
もちろん、これを繰り返し行う場合は、スクリプトから実行し、変数に適切な名前を使用し、それらすべてのグッドプラクティス(引数のファイル名の変換や出力の送信先の定義など)を使用する必要がありますが、今日のトピックはwhile
ループ)。
#!/bin/bash
cat servers.txt | grep -v CPU | while read servername cpu ram ip
do
echo $ip $servername
done
[この無料のチートシートでKubernetesの使用の基本を学びます。 ]
まとめ
while
ループは、特定の条件がtrueまたはfalseであることに依存するスクリプトで役立ちますが、ループをインタラクティブに使用して、特定の条件を監視することもできます。
覚えておくべき重要なことは次のとおりです。
終了する条件を常に明確にしてください ループ。それがCTRL-Cで自分で行うことを期待している場合 、次にコマンドに注意してください。 どのくらいの速さについて考えてください 各ループサイクルを繰り返す必要があります。ループ内でI/Oを伴う操作を行う場合、それは計画の重要な側面になります。
そのことを念頭に置いて、while
を楽しんでください できます。