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

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

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

序章

典型的なBashスクリプトには、次々に実行される一連のコマンドが含まれています。変数は、文字列、整数インデックス値、コマンドの結果などを格納するために使用できます。ユーザーが特定のコマンドを複数回実行する場合は、ループが必要です。これは、1つのコマンドの出力がリストの形式であり、各結果でリスト内の2番目のコマンドが実行される場合に特に役立ちます。

一般的な構文

の一般的な構文 にとって Bashのループは次のとおりです。

for in do ......完了

ここでは、 はBash変数であり、有効なLinuxシェル変数名である必要があります。つまり、名前には文字(az、AZ)、数字(0-9)、アンダースコア(_)の組み合わせが含まれ、文字またはアンダースコア。

The ループされる整数インデックスのカスタム範囲、または整数または文字列のカスタムリストのいずれかです。別のLinuxコマンドを含めることもできますが、そのようなコマンドの出力はスペースまたは改行文字で区切る必要があります。つまり、Bashでリストに解析できます(Bashのリストは、基本的にスペースまたは改行で区切られた値のコレクションです。 )。

実行するコマンドは、内部に配置する必要があります。 do..done ブロック。

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

整数値の範囲でループ:次のコードは、dir1、dir2、dir3からdir10までの名前のディレクトリを作成します。

for i in {1..10} do mkdir dir $ i done

固定値のリストをループします。 次のコードは、指定された固定リスト内の各文字列または整数を出力します。

for i in Hello 1 2 3 Bye! $ iをエコーし​​ます

コマンドの出力でループします: 次のコードは、の出力をループします ls 各ファイルの名前を指定された形式で出力します。

for i in `ls` do echo" Filename is $ i "done

式ベースの構文

Cプログラミング言語に似た式ベースの構文もBashで可能です。

for((式1;式2;式3))do ......完了

ここ、 式1 インデックス変数の初期化です。 式2 ループを終了する必要がある条件です。この条件は、各反復でチェックされます。 式3 インデックス変数の値のインクリメント/デクリメント/変更を指定します

次の例では、0から4までの値を出力するだけです。

for((i = 0; i <5; i ++))do echo $ i done

次の例では、式が指定されていないため、無限ループが作成されます。

for((;;))do echo "Ctrl-Cを押して停止"完了

中断して続行

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

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

for((i = 0; i <10; i ++))do if [[$ i -eq 5]] then break else echo $ i; fi完了

上記のループは0から4までの数値を出力します。次にiの値が5の場合、ループから抜け出します。これは、コマンドが特定の出力を提供するときにループを終了する場合に特に役立ちます。たとえば、次のループは、空のファイルが見つかった場合に中断します。

`ls`内のファイルの場合doflen =` wc -c $ file` if [["$ flen" = "0 $ file"]] then echo "$ file is empty" break else echo $ flen fi done 

コマンド wc -c ファイルの行数を出力します 。それはフォーマットでそれを印刷します 、 例えば、 10 test.txt。行数が0の場合、つまり空のファイルの場合、ループから抜け出します。

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

Cや他の多くのプログラミング言語と同様に、bashにも 継続する ステートメント。特定の条件が満たされた場合に、ループ内の反復の残りの部分をスキップします。

for((i = 0; i <10; i ++))do if [[$ i -eq5]]次にfiecho $ iを続行します。終わり

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

次の例では、ファイルの行数を出力します。特定の反復では、 継続する ファイルではなくディレクトリの場合。

`ls`内のファイルの場合doif [[-d $ file]] then continue fi wc -c" $ file "done

[[-d $ file]] ファイルがディレクトリかどうかを確認します。そうである場合は、次のファイル、つまり次の反復にスキップします。ディレクトリでない場合は、を使用してファイルの行数を出力します。 トイレ 前にも示したように、コマンド。

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

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

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

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

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

chmod + x test.sh

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

./test.sh

結論

The にとって Bashのループは非常に単純な機能ですが、ほとんどすべての種類の複雑なスクリプトシナリオで使用されます。これを学ぶことは、あなたが通常のLinuxユーザーであろうと上級のLinuxユーザーであろうと、あるいはシステム管理とDevOpsタスクの自動化を学び始めようと大いに役立ちます。