4.3.3 while條件循環(huán)語(yǔ)句

2023-05-11 14:58 更新

while條件循環(huán)語(yǔ)句是一種讓腳本根據(jù)某些條件來(lái)重復(fù)執(zhí)行命令的語(yǔ)句,它的循環(huán)結(jié)構(gòu)往往在執(zhí)行前并不確定最終執(zhí)行的次數(shù),完全不同于for循環(huán)語(yǔ)句中有目標(biāo)、有范圍的使用場(chǎng)景。while循環(huán)語(yǔ)句通過(guò)判斷條件測(cè)試的真假來(lái)決定是否繼續(xù)執(zhí)行命令,若條件為真就繼續(xù)執(zhí)行,為假就結(jié)束循環(huán)。while語(yǔ)句的語(yǔ)法格式如圖4-21所示。

圖4-21 while循環(huán)語(yǔ)句的語(yǔ)法格式

接下來(lái)結(jié)合使用多分支的if條件測(cè)試語(yǔ)句與while條件循環(huán)語(yǔ)句,編寫一個(gè)用來(lái)猜測(cè)數(shù)值大小的腳本Guess.sh。該腳本使用$RANDOM變量來(lái)調(diào)取出一個(gè)隨機(jī)的數(shù)值(范圍為0~32767),將這個(gè)隨機(jī)數(shù)對(duì)1000進(jìn)行取余操作,并使用expr命令取得其結(jié)果,再用這個(gè)數(shù)值與用戶通過(guò)read命令輸入的數(shù)值進(jìn)行比較判斷。這個(gè)判斷語(yǔ)句分為三種情況,分別是判斷用戶輸入的數(shù)值是等于、大于還是小于使用expr命令取得的數(shù)值。當(dāng)前,現(xiàn)在這些內(nèi)容不是重點(diǎn),我們當(dāng)前要關(guān)注的是while條件循環(huán)語(yǔ)句中的條件測(cè)試始終為true,因此判斷語(yǔ)句會(huì)無(wú)限執(zhí)行下去,直到用戶輸入的數(shù)值等于expr命令取得的數(shù)值后,這兩者相等之后才運(yùn)行exit 0命令,終止腳本的執(zhí)行。

    [root@linuxprobe ~]# vim Guess.sh
    #!/bin/bash
    PRICE=$(expr $RANDOM % 1000)
    TIMES=0
    echo "商品實(shí)際價(jià)格為0-999之間,猜猜看是多少?"
    while true
    do
    read -p "請(qǐng)輸入您猜測(cè)的價(jià)格數(shù)目:" INT
    let TIMES++
    if [ $INT -eq $PRICE ] ; then
    echo "恭喜您答對(duì)了,實(shí)際價(jià)格是 $PRICE"
    echo "您總共猜測(cè)了 $TIMES 次"
    exit 0
    elif [ $INT -gt $PRICE ] ; then
    echo "太高了!"
    else
    echo "太低了!"
    fi
    done

在這個(gè)Guess.sh腳本中,我們添加了一些交互式的信息,從而使得用戶與系統(tǒng)的互動(dòng)性得以增強(qiáng)。而且每當(dāng)循環(huán)到let TIMES++命令時(shí)都會(huì)讓TIMES變量?jī)?nèi)的數(shù)值加1,用來(lái)統(tǒng)計(jì)循環(huán)總計(jì)執(zhí)行了多少次。這可以讓用戶得知總共猜測(cè)了多少次之后,才猜對(duì)價(jià)格。

    [root@linuxprobe ~]# bash Guess.sh
    商品實(shí)際價(jià)格為0-999之間,猜猜看是多少?
    請(qǐng)輸入您猜測(cè)的價(jià)格數(shù)目:500
    太低了!
    請(qǐng)輸入您猜測(cè)的價(jià)格數(shù)目:800
    太高了!
    請(qǐng)輸入您猜測(cè)的價(jià)格數(shù)目:650
    太低了!
    請(qǐng)輸入您猜測(cè)的價(jià)格數(shù)目:720
    太高了!
    請(qǐng)輸入您猜測(cè)的價(jià)格數(shù)目:690
    太低了!
    請(qǐng)輸入您猜測(cè)的價(jià)格數(shù)目:700
    太高了!
    請(qǐng)輸入您猜測(cè)的價(jià)格數(shù)目:695
    太高了!
    請(qǐng)輸入您猜測(cè)的價(jià)格數(shù)目:692
    太高了!
    請(qǐng)輸入您猜測(cè)的價(jià)格數(shù)目:691
    恭喜您答對(duì)了,實(shí)際價(jià)格是 691
    您總共猜測(cè)了 9 次
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)