Bash'While 'ループ:チュートリアルと例

Bashスクリプトで「while」ループを使用してコマンドを反復処理します。

Bash(Bourne Again Shell)は、GNU / Linuxオペレーティングシステムのシェルコマンドプロンプトおよびスクリプト言語です。これは、ほとんどのLinuxディストリビューションのデフォルトのシェルです。

ほとんどのスクリプト言語と同様に、Bashは同様のタスクを複数回繰り返すためのループ構文を提供します。この記事では、の使用方法を学びます その間 Bashでループします。

序章

The その間 Bashのループは、別のコマンド(条件コマンド)の出力に基づいて、コマンド(実行されたコマンド)を複数回実行するために使用されます。実行されたコマンドは、conditionコマンドが正常に実行されるまで実行を続けます(つまり、0ステータスを返します。Linuxのコマンドはすべて、成功の場合は0を返し、失敗の場合はゼロ以外の整数を返します)。

複数の条件コマンドがある場合、ステートメントはリストの最後のコマンドのステータスのみを考慮します。つまり、ループはリストの最後のコマンドが正常に実行されるまで実行されます。

一般的な構文

の一般的な構文 その間 Bashのループは次のとおりです。

行われている間

実行コマンドリストは、条件コマンドリストの最後のコマンドが正常に実行され、ステータス0で終了するまで実行を続けます。反復では、最後の条件コマンドが失敗すると、ループが終了します。

ユーザーは、コマンドリストで任意の実行可能ファイルを指定できます。これは、標準のLinuxプログラムまたはカスタムユーザープログラムまたはスクリプトにすることができます。各コマンドは、新しい行に配置するか、同じ行にセミコロンで区切る必要があります。

いくつかの例を見てみましょう。

変数が特定の値になるまでループします。 次のループは、変数の値まで実行されます バツ 10に等しくありません。

x = 0 while [[$ x -ne 10]] do echo $ x((x ++))done

各反復で、xの値が10であるかどうかをチェックしています。値は、 テスト 指図。 [[ 表現 ]] テストコマンドの構文です(を参照) 男テスト)。ここで使用しているので -ne 演算子(「等しくない」を表す)の場合、テストコマンドは0を返します。つまり、xの値が10でない場合は成功し、ゼロ以外の値を返します。つまり、xの値が10の場合は失敗します。

その後、内部 やる...やった ブロックでは、xの値を出力してインクリメントします。 xの値が10になると、テストコマンドはゼロ以外のステータスを返し、ループは終了します。

ノート: whileループで使用されるインデックス変数は、変数を暗黙的に初期化できるforループとは対照的に、whileループの前または条件コマンドのいずれかで初期化されます。

複数の条件コマンドを使用する場合: 次のループは、という名前の5つのディレクトリを作成します dir0、dir1、... dir4.

z = 0 while echo "ファイルのリスト:" ls -l [[$ z -ne 5]] do echo "Creating dir $ z ..." mkdir dir $ z((z ++))done

最初のコマンド echo「ファイルのリスト:」ls -l 完全に1回実行されます。それらの成功または失敗は、ループの実行時間にはまったく影響しません。

次に、変数zの値をチェックするためのテストコマンドが実行されます。 zの値が5でなくなるまで、テストコマンドは成功ステータスを返すため、ループは実行を継続します。条件コマンドと実行コマンドは順番に実行され続けます。ここでは、反復ごとに、最初に条件付きでechoコマンドとlsコマンドを実行し、次に3番目の条件コマンドでzの値をチェックします。 5でない場合は、ループに入り、指定されたコマンドを実行します。

中断して続行

条件付き終了のBreakステートメント

条件文を使用することもできます もしも ループ内。 The もしも ステートメントは、 壊す ステートメント、ループからの条件付き終了。

x = 0 while [[$ x -ne 10]] do if [[$ x -eq 5]] break fi echo $ x((x ++))done

上記のwhileループは、0から4までの数値を出力します。次に、iの値が5の場合、ループから抜け出します。これは、コマンドが特定の出力を提供するときにループを終了する場合に特に役立ちます。

条件付きで反復をスキップするステートメントを続行する

Bashには 継続する ステートメント。特定の条件が満たされた場合に、ループ内の反復の残りの部分をスキップします。

x = 0 while [[$ x -ne 10]] do if [[$ x -eq5]]続行fiecho $ x((x ++))done

上記のループは、5を除いて、0から10までの数値を出力します。 x = 5 の反復で開始時にループ内の残りのコードをスキップするcontinueステートメントがあります。 x = 6.

ループの使用:スクリプトとコマンドライン

ループ構文は、Bashシェルで直接使用することも、実行可能なシェルスクリプトファイルから使用することもできます。に似ている にとってその間 ループ、一度 その間 ループ構文がシェルに入力されると、シェルはプロンプトを続行して、ユーザーがループするコマンドを続行できるようにします。

または、ユーザーはこれをスクリプトファイルに保存して、スクリプトファイルを実行できます。

The #!/ bin / bash 開始時に、ファイルの実行時に使用されるインタプリタを指定します。 Bashは現在最も一般的に使用されているシェルですが、一部のユーザーは次のようなシェルを好みます。 zsh、このファイルの先頭でbashの代わりに指定する必要があります。

実行権限を付与するには このファイルに対して、次を実行します。

chmod + x test.sh

ついに、 ファイルを実行するには、 走る:

./test.sh

結論

The その間 ループ、 にとってそれまで ループはBashスクリプトの重要な機能です。 whileループは、特定のプログラムが成功したときに代替コマンド/プログラムを実行するために使用されることを除いて、untilループと同様の使用法があります。これは、高度なネットワークスクリプト、システムメンテナンススクリプトなどで役立つことがよくあります。