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 ~]# 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章