Shell脚本【10】Shell While循环和until循环(附例题)

while循环

while循环是循环语句的一种,循环依据是条件表达式的值,当条件表达式的值为真时,while语句将循环执行循环体中的命令,直至条件表达式的值为假

语法结构:

			while condition
			do
			    statements
			done

while 循环的执行流程为:

  • 先对 condition 进行判断,如果该条件成立,就进入循环,执行 while 循环体中的语句,也就是 do 和 done之间的语句。这样就完成了一次循环。
  • 每一次执行到 done 的时候都会重新判断 condition 是否成立,如果成立,就进入下一次循环,继续执行 do 和 done之间的语句,如果不成立,就结束整个 while 循环,执行 done 后面的其它 Shell 代码。
  • 如果一开始 condition 就不成立,那么程序就不会进入循环体,do 和 done 之间的语句就没有执行的机会。

while循环例题

示例1、计算1到100的和

#!/bin/bash
##计算1到100的和##

i=1
sum=0
while [ $i -le 100 ]
do
        sum=`expr $sum + $i`
        i=`expr $i + 1`
done
echo "The sum is $sum"

运行结果:

The sum is 5050

expr 命令计算算术表达式的值,在每个算术运算符的两边必须用空格符分开

示例2、显示2-50之间的素数

#!/bin/bash
##计算3-50之间的素数##

i=2
while [ $i -le 50 ]
do
        j=2
        flag=1
        while [ $j -le `expr $i / 2` ] 
        do
                if [ `expr $i % $j` -eq 0 ]
                then flag=0;break
                fi
                j=`expr $j + 1`
        done
        if [ $flag -eq 1 ]
        then echo "${i} is a prime!"
        fi
        i=`expr $i + 1`
done

运行结果:

[root@desktop ~]# ./test02.sh 
2 is a prime!
3 is a prime!
5 is a prime!
7 is a prime!
11 is a prime!
13 is a prime!
17 is a prime!
19 is a prime!
23 is a prime!
29 is a prime!
31 is a prime!
37 is a prime!
41 is a prime!
43 is a prime!
47 is a prime!

until 循环

unti 循环和 while 循环恰好相反,当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环。until 的使用场景很少,一般使用 while 即可。

Shell until 循环的用法如下:

until condition
do
    statements
done

condition表示判断条件,statements表示要执行的语句(可以只有一条,也可以有多条),do和done都是 Shell 中的关键字。

until 循环的执行流程为:

  • 先对 condition 进行判断,如果该条件不成立,就进入循环,执行 until 循环体中的语句(do 和 done
    之间的语句),这样就完成了一次循环。
  • 每一次执行到 done 的时候都会重新判断 condition是否成立,如果不成立,就进入下一次循环,继续执行循环体中的语句,如果成立,就结束整个 until 循环,执行 done 后面的其它Shell 代码。
  • 如果一开始 condition 就成立,那么程序就不会进入循环体,do 和 done 之间的语句就没有执行的机会。

注意,在 until 循环体中必须有相应的语句使得 condition 越来越趋近于“成立”,只有这样才能最终退出循环,否则 until 就成了死循环,会一直执行下去,永无休止。

until循环例题

示例3、输入文件名保存到文件

#!/bin/bash
##输入文件名保存到文件##

ans=yes
until [ "$ans" = no ]
do
        echo Enter a name
        read name
        echo $name >> filenames
        echo "Continue?"
        echo Enter yes or no
        read ans
done

运行结果:

[root@desktop ~]# ./test03.sh
Enter a name
haha
Continue?
Enter yes or no
yes
Enter a name
hehe
Continue?
Enter yes or no
no
[root@desktop ~]# 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章