前のセクションでは、フロー制御ステートメントの分岐ステートメントについて学びました。このセクションでは、フロー制御ループステートメントの最後の部分を見て、3つの一般的なループステートメント(for while until)の使い方を学びましょう。
ループステートメントの概要
ループステートメントは、特定の条件下で繰り返し実行できるステートメントを指します。主に、ファイルのバッチ変更、コマンドのタイミング実行、アンチコピー型トロイの木馬など、特定の状況に対応して、繰り返しはあるがわずかに異なるアクションを実行するため。ループステートメントを使用すると、コンピュータープログラムはその計算上の利点を具体化し、プログラムのコーディング効率を大幅に向上させます。
forループ
前書き
forループは固定ループです。forループはステートメントにループを提供すると同時に、変数を列挙および反復します。変数が範囲またはセットの新しい列挙値または反復値を取得するたびに、ステートメントをループ本体で1回ループします
文法
#第一种形式:枚举
for Var in Key1 Key2 Key3...
#其中,Var为变量 Key1 Key2等为变量枚举中选中的集合值
do
<Action>
done
#第二种形式:迭代
for Var in {
n1..n2[..step]}
#n1 为起始数字;n2 为结束数字; step可选,为步长,即每步增加的数字
do
<Action>
done
例
#以下示例求1到100中所有奇数的和
sum=0
for i in {
1..100..2}
do
sum=$[$sum + $i]
done
echo $sum
予防
- 反復形式の場合、データの開始データは数字だけでなく文字なども含まれます。たとえば、
{a..z}
すべての小文字が再度反復されます - 列挙には括弧は不要で、各値の間にスペースが必要です
- ループ変数の値は、ループ本体で変更できますが、ループプロセスには影響しません。列挙は反復と同じです。次のループに入った後、現在の変数値に関係なく、次の値に反復します
ループのC言語スタイル
bashのforループはC言語スタイルもサポートしています。構文は次のとおりです。他の使用法は同じです。詳しくはC言語forループを参照してください
for ((i=1;i<=10;i++))
do
echo $i
done
- bashのCスタイルのforループには2つの括弧が含まれていることに注意してください。
- ループ変数の値は、実行中のプロセス中に変更できます。これは、C言語スタイルのループに限定されています
ループ
前書き
whileループはforループとは異なり、whileループは不定ループであり、条件付きループとも呼ばれます。回数を制限するループ変数はありません。ループ条件が満たされると、ループ条件が満たされないまでループが続行されます。
文法
while [Condition]
do
<action>
done
例
#以下示例同样求1-100中所有奇数的和
#!/bin/bash
#Author:Zheng
i=1
sum=0
while [ $i -lt 100 ]
do
sum=$[$sum + $i]
i=$[$i + 2]
done
echo $sum
予防
-
括弧内のスペースに注意してください
-
無限ループを実現したい場合は、条件式に定数変数を追加することができ、ループ本体に条件を設定してループをジャンプさせるだけです(詳細は下記を参照)。
-
ループは有効な終了条件(ループ条件またはループ本体)を設定する必要があります。そうしないと、リソースが占有されてシステムがクラッシュする可能性があります。
次の例では、無限ループを使用し、breakステートメントを使用してジャンプアウトしています。
i=0
while [ 1 -eq 1 ]
do
i=$[$i + 1]
echo $i
if [ $i -ge 10 ]; then
break
fi
done
ループまで
前書き
untilループとwhileループはどちらも無限ループですが、条件判断の方法はwhileとは逆です。名前が示すように、untilループステートメントは、条件付き判断が確立されない限りループを継続し、条件付き判断が確立されるまでループからジャンプします。コンテンツの一部はwhileループと同じなので、繰り返しません。
文法
Bashのuntilループ構文は一部のプログラミング言語とは異なります。until条件判断文はループ本体の前にあります。最初に条件が満たされた場合、最初にループ本体を実行してからジャンプアウトと判断するのではなく、ループが直接スキップされます。
until [Condition]
do
<Action>
done
例
#本示例同样完成1-100中所有偶数的和
#!/bin/bash
#Author:Zheng
i=1
s=0
until [ $i -gt 100 ]
do
s=$[$s + $i]
i=$[$i + 2]
done
echo $s
予防
- 条件判断では括弧内のスペースに注意してください
スキップしてループからジャンプする
ループからのスキップとジャンプの違いは1語だけですが、概念は完全に異なります
文法
主にcontinue
ステートメントとbreak
ステートメントを使用する
for i in {
1..100}
do
<action>
continue #仅跳过当前循环进入下一循环
continue n #n为数字,跳过n层循环
done
例
#此示例在i为偶数时跳出,偶数循环号下不会显示"Finish"
for i in {
1..20}
do
echo $i
if [ $[$i % 2] == 0 ]; then
continue
#当前仅有1层循环,continue 2 表示直接跳过当前的第二层循环,进入第二层的下一迭代
fi
echo "Finish"
done
echo "Final"
#此示例在i为10时退出,不输出Finish而直接Final
for i in {
1..20}
do
echo $i
if [ $i == 10 ]; then
break
#当前仅有1层循环,break 2 表示直接跳出当前两层循环
fi
echo "Finish"
done
echo "Final"
予防
- ループのスキップは、ループの柔軟性を高めるために、通常、条件付き判断ステートメントと組み合わせて使用されます。
continue
andbreak
コマンドでは、その後に追加される数はサイクル数ではなく、サイクル数を表しています。一部の参照は間違っている可能性があります。注意してください
総括する
3つのループ形式は共通に使用でき、さまざまな環境でループがより適しています。実際のシナリオに基づいて、使用する必要のあるループステートメントを選択してください。
このセクションでは、シェルプログラミング、より詳細な関数などの学習を正式に終了しました。Bashはオブジェクト指向プログラミング言語ではないため、日常生活では広く使用されていません。一時的に取り上げることはしません。必要に応じて後で更新します。
前のセクション「Linux Bash Shellプログラミング(9):フロー制御ステートメント(パート1)分岐ステートメント(if、case)