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

Bashスクリプトで「until」ループを使用してコマンドをループします。

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

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

序章

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

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

一般的な構文

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

完了するまで

コマンド実行リストは、条件コマンドリストの最後のコマンドが失敗するまで実行されます。最後のコマンドが成功すると、ループは終了します。

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

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

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

[[$ x -eq10]]がエコー$ x((x ++))を実行するまでx = 0

各反復で、xの値が10であるかどうかをチェックしています。値は、 テスト 指図。 [[ 表現 ]] テストコマンドの構文です(を参照) 男テスト).

その後、内部 やる...やった ブロックの場合、xの値を出力し、それをインクリメントするだけです。条件コマンドが成功すると、ループは終了します。 $ x に等しい 10.

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

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

z = 0までecho "Hi" echo "Bye" [[$ z -eq 5]] do echo "Creating dir $ z ..." mkdir dir $ z((z ++))done

最初のコマンドecho“ Hi”とecho“ Bye”は完全に1回実行されます。それらの成功または失敗は、ループの実行時間にはまったく影響しません。

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

中断して続行

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

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

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

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

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

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

x = 0まで[[$ x -eq 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スクリプトのもう1つの重要な機能です。複雑なスクリプトでは、特定のプログラムセットが失敗ステータスを返すことが予想され、他のコマンドを実行して失敗をログに記録したり、エラーを詳細に表示したり、単にいくつかの代替プログラムを実行したりする場合に特に重要です。