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

ループの Bash スクリプトを例で説明

はじめに

for ループは、要素のリストを通過する重要なプログラミング機能です。これらの要素のそれぞれについて、for loop は一連のコマンドを実行します。このコマンドは、終了条件までプロセスを繰り返すのに役立ちます。

数値の配列を処理する場合でも、ファイルの名前を変更する場合でも、for です。 Bash スクリプトのループは、項目を自動的に一覧表示する便利な方法を提供します。

このチュートリアルでは、Bash for の使用方法を示します スクリプトでループします。

前提条件

  • ターミナル/コマンド ラインへのアクセス (CTRL +ALT +T ).
  • Nano や Vi/Vim などのテキスト エディタ
  • 初歩的なプログラミング用語

ループ用 Bash スクリプト

for を使用します 指示されたコマンドを実行するために項目のリストを反復処理するループ。

for の基本構文 Bash スクリプトのループは次のとおりです:

for <element> in <list>
do
	<commands>
done

ループを通じて解析される要素、リスト、およびコマンドは、ユース ケースによって異なります。

Bash for ループの例

以下は、for のさまざまな例です。 Bash スクリプトでループします。スクリプトを作成してコードを追加し、ターミナルから Bash スクリプトを実行して結果を確認します。

個別アイテム

一連の指定された要素を繰り返し処理し、次の構文でそれぞれを出力します:

#!/bin/bash
# For loop with individual numbers
for i in 0 1 2 3 4 5
do
   echo "Element $i"
done

スクリプトを実行して出力を確認します:

. <script name>

スクリプトは、提供されたリストの各要素をコンソールに出力します。

または、スペースで区切られたリストで文字列を使用します:

#!/bin/bash
# For loop with individual strings
for i in "zero" "one" "two" "three" "four" "five"
do
   echo "Element $i"
done

スクリプトを保存し、ターミナルから実行して結果を確認してください。

出力は各要素をコンソールに出力し、ループを終了します。

範囲

個々の要素のリストを記述する代わりに、範囲構文を使用して最初と最後の要素を示します:

#!/bin/bash
# For loop with number range
for i in {0..5}
do
        echo "Element $i"
done

スクリプトは、指定された範囲からすべての要素を出力します。

範囲構文は文字にも機能します。例:

#!/bin/bash
# For loop with letter range
for i in {a..f}
do
        echo "Element $i"
done

スクリプトは、指定された範囲で文字を昇順でコンソールに出力します。

開始要素が終了要素よりも大きい場合、範囲構文は要素に対して降順で機能します。

例:

#!/bin/bash
# For loop with reverse number range
for i in {5..0}
do
        echo "Element $i"
done

出力には、番号が逆順でリストされます。

範囲構文は、要素が増加しても減少しても機能します。

インクリメント付き範囲

範囲構文を使用し、ステップ値を追加して、間隔で範囲を通過します。

たとえば、次のコードを使用して偶数をリストします:

#!/bin/bash
# For loop with range increment numbers
for i in {0..10..2}
do
        echo "Element $i"
done

出力は、指定された範囲から 1 桁おきに出力されます。

または、10 から 0 までループして偶数ずつカウントダウンします:

#!/bin/bash
# For loop with reverse range increment numbers
for i in {10..0..2}
do
        echo "Element $i"
done

スクリプトを実行して、範囲内の要素を 1 つおきに降順で出力します。

交換増分 2 異なる間隔の値を取得するための範囲間の距離より小さい任意の数値。

seq コマンド

seq コマンドは数列を生成します。 Bash スクリプト for のシーケンスを解析します リストを生成するコマンドとしてループします。

例:

#!/bin/bash
# For loop with seq command
for i in $(seq 0 2 10)
do
   echo "Element $i"
done

出力は seq によって生成された各要素を出力します コマンド。

seq コマンドは歴史的なコマンドであり、シーケンスを生成するための推奨される方法ではありません。中括弧の組み込みメソッドの方が好ましく、高速です。

C スタイル

Bash スクリプトでは、C スタイルの 3 つのパラメーター for を使用できます ループ制御式。次のように、二重括弧の間に式を追加します:

#!/bin/bash
# For loop C-style
for (( i=0; i<=5; i++ ))
do
   echo "Element $i"
done

式は以下で構成されます:

  • イニシャライザ (i=0 ) は、ループがカウントを開始する数を決定します。
  • 停止条件 (i<=5 ) は、ループがいつ終了するかを示します。
  • ステップ (i++ ) i の値を増やします 停止条件まで

各条件はセミコロン (;) で区切ります )。ユースケースの必要に応じて 3 つの値を調整してください。

ターミナルは、初期化子の値から始まる各要素を出力します。

値は、停止条件まで、ステップ量だけ増加します。

無限ループ

無限 for ループには、ループを終了する条件が設定されていません。終了条件が存在しないか満たされないため、プログラムは無限に実行されます。

無限の for を生成するには ループするには、次のコードを Bash スクリプトに追加します:

#!/bin/bash
# Infinite for loop
for (( ; ; ))
do
      echo "CTRL+C to exit"
done

スクリプトの実行を終了するには、CTRL を押します +C .

無限ループは、特定の条件が満たされるまでプログラムを実行する場合に役立ちます。

ブレイク

break ステートメントは現在のループを終了し、for を終了するのに役立ちます 早々にループ。この動作により、規定の条件を満たす前にループを終了できます。

実演するには、次のコードを Bash スクリプトに追加します:

#!/bin/bash
# Infinite for loop with break
i=0
for (( ; ; ))
do
        echo "Iteration: ${i}"
        (( i++ ))
        if [[ i -gt 10 ]]
        then
                break;
        fi
done
echo "Done!"

この例は、無限の for を終了する方法を示しています break を使用したループ . Bash if ステートメントは、各整数の値をチェックするのに役立ち、break を提供します 調子。これにより、整数が値 10 に達するとスクリプトが終了します。

ネストされたループと外側のループを終了するには、break 2 を使用します .

続ける

continue コマンドは、現在のループ反復を終了します。プログラムは次の繰り返しからループを続けます。例として、次のコードを Bash スクリプトに追加して、continue がどのように処理されるかを確認します。 ステートメントは for で機能します ループ:

#!/bin/bash
# For loop with continue statement
for i in {1..100}
do
        if [[ $i%11 -ne 0 ]]
        then
                continue
        fi
        echo $i
done

コードは 1 から 100 までの数字をチェックし、11 で割り切れる数字のみを出力します。

条件 if continue は割り切れるかどうかをチェックします。 このステートメントは、11 で割ったときに余る数をスキップします。

配列

配列は要素のリストを格納します。 for loop は、要素ごとに配列を通過する方法を提供します。

たとえば、配列を定義し、次のように要素をループします。

#!/bin/bash
# For loop with array
array=(1 2 3 4 5)
for i in ${array[@]}
do
        echo "Element $i"
done

出力は、配列に格納されている各要素を最初から最後まで出力します。

バッシュ for loop は、個々の配列要素を反復処理する唯一の方法です。

指数

配列を操作する場合、各要素にはインデックスがあります。

次のコードで配列のインデックスを一覧表示します:

#!/bin/bash
# For loop with array indices
array=(1 2 3 4 5)
for i in ${!array[@]}
do
        echo "Array indices $i"
done

要素のインデックスはゼロから始まります。したがって、最初の要素のインデックスは 0 です。

出力は、5 つの要素を持つ配列に対して 0 から 4 までの数字を出力します。

ネストされたループ

多次元配列をループまたは生成するには、ネストされた for を使用します ループします。

例として、ネストされたループを使用して 0 から 3 までの 10 進数値を生成します。

#!/bin/bash
# Nested for loop
for (( i = 0; i <= 2; i++ ))
do
    for (( j = 0 ; j <= 9; j++ ))
    do
            echo -n " $i.$j "
    done
  echo "" 
done

コードは次のことを行います:

  • 1 行目 for を開始します 0 でループし、1 ずつインクリメントし、2 で終了します。
  • 3 行目 ネストされた for を開始します ゼロでループします。値は 1 ずつ増加し、両端を含めて 9 で終了します。
  • 5 行目 for の値を出力します ループします。ネストされた for は、外側のループ値ごとに 1 回ずつ、すべての数値を 3 回ループします。

出力は各数値の組み合わせをコンソールに出力し、out r の場合に改行を入力します ループは 1 回の反復を終了します。

文字列

文字列内の単語をループするには、文字列を変数に格納します。次に、変数を for に解析します リストとしてループします。

例:

#!/bin/bash
# For loop with string
strings="I am a string"
for i in ${strings}
do
        echo "String $i"
done

ループは文字列を繰り返し処理し、各単語は個別の要素です。

出力は、文字列の個々の単語をコンソールに出力します。

ファイル

for 近接検索と組み合わせたループは、特定の条件を満たすファイルを一覧表示または変更するのに役立ちます。

たとえば、現在のディレクトリ内のすべての Bash スクリプトを for で一覧表示します。 ループ:

#!/bin/bash
# For loop with files
for f in *.sh
do
        echo $f
done

スクリプトは現在のディレクトリを検索し、.sh を持つすべてのファイルを一覧表示します。

ファイルまたはディレクトリをループして、複数の要素の権限を一度に自動的に名前変更または変更します。

コマンド置換

for loop は、反復する要素のリストとしてコマンド置換を受け入れます。

次の例は、for の書き方を示しています。 コマンド置換によるループ:

#!/bin/bash
# For loop with command substitution
list=`cat list.txt`
# Alternatively, use list=$(cat list.txt)
for i in $list
do
        echo $i
done

Bash コメントは、コマンド置換の代替構文を提供します。コードは list.txt の内容を読み取ります cat を使用したファイル コマンドを実行し、情報を変数 list に保存します .

コマンド置換メソッドを使用して、テキスト ファイルに保存された名前のリストからファイルの名前を変更します。

注: cat コマンドと for ループを使用して、Bash でファイルを 1 行ずつ読み取る方法を学びます。

コマンドライン引数

for を使用 ループして、コマンド ライン引数を反復処理します。

次のコード例は、for でコマンド ライン引数を読み取る方法を示しています。 ループ:

#!/bin/bash
# For loop expecting command line arguments
for i in [email protected]
do
    echo "$i"
done

Bash スクリプトを実行するときに、コマンド ライン引数を指定します。

例:

. <script name> foo bar

[email protected] 各コマンドライン引数を for に置き換えます ループ。

結論

このチュートリアルに従えば、for の使い方がわかります。 Bash スクリプトでループして、リストを反復処理します。

次に、Bash 関数の作成方法と使用方法を学びます。


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

  2. 初心者向けのLinuxunexpandコマンドの説明(例付き)

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

  1. 例を使用してBashスクリプトを作成する方法

  2. Bash For Loop

  3. Bash for ループの例

  1. 初心者向けのLinuxmkdirコマンドの説明(例付き)

  2. 初心者向けのLinuxカットコマンドの説明(例付き)

  3. 実用的な例を使用したBashForLoop