for ループ ステートメントは、リスト オブジェクトが不規則で、リストのソースが固定されている (リスト ファイルなど) 場合に非常に適しています。ループの数を制御する必要がある場合、操作オブジェクトに番号順に番号が付けられ、特定の条件に従って繰り返し操作が実行される場合は、別のループ (while) を使用する方が適しています。
ループ ステートメントの条件が true である限り、コマンドは true でなくなるまでループで実行されます。
while 構文の形式
true 条件は、変数が true であることを意味し、exit または stop コマンドが発生するまで無限ループは停止しません。
#!/bin/bash
while true
do
命令
done
ループの数を制限します。i++ にします。毎回 1 を加算します。ゼロから始まる回数は 10 以下で、10 より大きい場合はループを停止します。
#!/bin/bash
i=0
while [ $i -le 10 ]
do
命令
let i++
done
while ループの場合
ループ構文の形式はすでに知っています。上記の基本的な構文形式を念頭に置いておく必要があります。いくつかの簡単なケースを通してその使用方法を見てみましょう。
ケース 1: 10-1 を降順に出力する
#!/bin/bash
i=10
while [ $i -gt 0 ]
do
sum=$(( $i + $i ))
echo $i + $i = $sum
let i--
done
ケース2:10の昇順と降順を出力する
[root@daxia sh]# vim while2.sh
#!/bin/bash
a=1
b=10
while [ $a -le 10 ]
do
sum=$(( $a + $b ))
echo $a + $b =$sum
let a++
let b--
done
ケース 3: ユーザーをバッチで作成する
以前は for ステートメントを使用して実行しましたが、今回は while がユーザーを作成する方法を見てみましょう。ここでのユーザーの一括作成とは、テキストドキュメントに複数の名前を記述し、ドキュメントのコンテンツサイクルを通じてユーザーを作成することを意味します。
ユーザーを作成するスクリプトは、最初にセキュリティの問題を考慮し、現在のユーザーが管理者であるかどうかを判断し、そうでない場合はそのユーザーの使用を許可しません。ループ内に一連の判定があります。管理者であれば作成されます。スリープとは、再循環する前に 1 秒待つことを意味します。
#!/bin/bash
while read user
do
id $user &> /dev/null
if [ $? -eq 0 ];then
echo "useradd: $user 你不是管理员 无权创建"
else
useradd $user &>> /dev/null
echo "user: $user 创建成功"
fi
echo $user
sleep 1
done<user.txt
内蔵ブレークアウトループ
形式は次のとおりです。
exit はスクリプトを終了し、残りのコマンドは実行されません。
Break はループから抜け出しますが、ループに続くコマンドを実行します。
continue このサイクルを終了しますが、サイクルの背後にあるコマンドを含めて次のサイクルに進みます。
注: これはループです。for ステートメントと while ステートメントの両方を使用できます。
ケース 1: exit はスクリプトを終了します。
スクリプトには、最初のエコーの後に終了を記述したため、3 回ループするはずの「Hello...」が 1 つの結果のみを表示し、3 番目のエコーが出力されなかったことが書かれています。
#!/bin/bash
for i in {
1..3}
do
echo "你好,我是大虾好吃吗"
exit
echo "这里的打印不出来"
done
echo "这里的也打印不出来"
ケース 2: このループから抜け出す
ブレークの使い方は以下の通りで、ループを抜け出すという意味で、最初のエコー実行後にブレークに遭遇した場合は、直接ループコマンドを抜けて、三番目のエコーコマンドを実行します。したがって、最初の echo コマンドと 3 番目の echo コマンドは、実行中に 1 回だけ出力されます。
ケース 3: 続行するとこのループが終了します
continue の使用法は次のとおりです。これは、ループを終了してループ ステートメントを再実行し、値の範囲に従ってループし、ループが終了するまで 3 番目の echo コマンドが実行されることを意味します。
#!/bin/bash
for i in {
1..3}
do
echo "你好,我是大虾好吃吗"
continue
echo "这里打印不出来"
done
echo "你好,大虾好吃吗"
これを学んだ後は、いくつかの簡単なスクリプトを独立して作成し、これまでの記事の事例を組み合わせて学生管理システムを自分で作成できるようになります。ここで提案したいのですが、実行スクリプトは管理者のアイデンティティに準拠する必要があり、学生管理には多階層のディレクトリが必要であり、学生情報はそのディレクトリ内で作成、削除、変更する必要があります。さまざまな変数とループ判定ステートメントを適用し、さらに考えて、現在のレベルを区別するのが得意である必要があります。