1. ホーム
  2. スクリプト・コラム
  3. リナックスシェル

シェルスクリプトの実践 - whileループ文

2022-02-12 21:08:03

前置き

上記では、有限ループの中で便利なforループの使い方を説明しましたが、今日はwhileループについて調べてみましょう

whileループ文の構文解析

構文フォーマット I.

while [condition]
do
 Operation
done

構文フォーマット II.

while read line
do
 operation
done < file


readコマンドでファイルを1行ずつ読み、何行目か、whileループの回数

注:doとdoneの間の文は、式が真のときのみ実行され、式が偽のときはループが終了する(つまり、条件が成立していればループは実行され続ける)。

while true ;do
	echo 'helloword'
done

whileの使用例

1. 1から10までの数字をループで表示する

#! /bin/bash

num=1

while [ $num -le 10 ]
do
	echo $num
	num=$(( $num + 1 ))
done

2. while を使ってファイルを読み、その内容を表示する。

使用法1

while read line
do
	echo $line
done <. /a.txt

使用法2

cat . /a.txt|
while read line
do
	echo $line 
done

forの実装では、ファイルを読み込んで、その行に表示します。

#! /bin/bash
content=$(cat . /a.txt)
for i in $content
do
 echo $i
done

3.2つの数字を掛け合わせた効果を出力する(下図参照)

ここで提案してくれた@A Little Whiteに感謝します。多くの人は等号を見ると2つの等しい辺を思い浮かべますが、これは私たちの教育的習慣に沿ったものです。


画像のような効果を得るには、次のようにすればよいでしょう。

#! /bin/bash
num=1
while [ $num -lt 10 ]
do
	sum=$(( $num * $num))
	echo "$num * $num = $num"
	((num++))
done

もちろん、ほとんどの人は、方程式の両辺は等しくなければならない、等しくないと格好が悪いという考え方に慣れている。これは義務教育の結果であり、少し変えると

#! /bin/bash
num=1
while [ $num -lt 10 ]
do
	sum=$(( $num * $num))
	echo "$num * $num = $sum"
	((num++))
done

この出力は、ほとんどの人の数学的習慣と一致する。

指定されたファイルにユーザーを作成する

zhangsan lisi wangwuを含むファイル名.txtを指定する。

name.txtはこのような感じです。

[root@ecs-c13b ~]# cat name.txt 
zhangsan
lisi
wangwu

name.txtからユーザー名を繰り返し入力し、ユーザーを作成します。

#! /bin/bash
for name in `cat /root/name.txt`
#for name in $(cat /root/a.txt)
do
  id $name &> /dev/null
  if [ $? -ne 0 ];then
    useradd $name
    echo "123456" |passwd --stdin $name &> /dev/null
    echo "user $name created"

  else
    echo "user $name is exist"
  fi
done

概要

これまで、for-while-if-caseの4つの一般的な制御文について検討してきましたが、そろそろ練習して合成してみましょう。

シェルスクリプト-whileループについての記事は以上です。シェル - whileループの詳細については、Scripting Houseの過去記事を検索するか、以下の関連記事を引き続きご覧ください。