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

Linuxスクリプト:Bashでのwhileループの3つのハウツー

シェルスクリプト、特に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を楽しんでください できます。


Linux
  1. BashForループガイドと例

  2. プロのヒント:For、While、Untilループ

  3. Bash Forループを並列化しますか?

  1. Bash の For ループと While ループの例

  2. ループの維持 – Bash For、While、Until ループの例

  3. Linux シェル スクリプト用の 12 の Bash for ループの例

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

  2. Bash for ループの例

  3. Linux バッシュ。 for ループと関数、数値の加算