iT邦幫忙

DAY 13
7

快快樂樂學會讓電腦幫我做事系列 第 10

[Shell Script] Day13-繼續或者跳脫迴圈

  • 分享至 

  • xImage
  •  

繼續迴圈的目的就是,如果在這次輪迴中,我不想做任何事情,我想要邁向下一次的輪迴,不是啦!是迴圈,邁向下一次的迴圈,我就可以用繼續迴圈的關鍵字。

那脫離迴圈呢?就想成脫離輪迴吧~當神人去了~不想再做迴圈裡的事情了!
YA! 終於把煩人的迴圈給介紹完了,接下來呢?
還有什麼可以端出來嗎?
當然有!在介紹完迴圈之後,就要跟大家介紹一下如何繼續迴圈和脫離迴圈。

什麼叫做繼續迴圈?
什麼又叫做脫離迴圈呢?

繼續迴圈的目的就是,如果在這次輪迴中,我不想做任何事情,我想要邁向下一次的輪迴,不是啦!是迴圈,邁向下一次的迴圈,我就可以用繼續迴圈的關鍵字。

那脫離迴圈呢?就想成脫離輪迴吧~當神人去了~不想再做迴圈裡的事情了!

所以言歸正傳:
繼續迴圈用的是 continue
脫離迴圈用的是 break

唉~就這兩個阿~講那麼多廢話 臉紅

所以,不管是 for 迴圈、while 迴圈、甚至是 until 迴圈都可以使用這兩個關鍵字來繼續或跳脫迴圈。

最後,還是要來看個範例吧,這個範例會用到之前介紹的迴圈外,當然, continuebreak 也會在裡面:

#!/bin/bash

IsQuit="FALSE"
Week=1
Hours=1
Endurance=1
until [ "$IsQuit" = "YES" ]
do
    # 若是週末則印出休假訊息
    if [ $Week -eq 6 ] || [ $Week -eq 7 ]; then
        WorkingDay="FALSE"
        echo "YA! 星期 $Week 休假 ..."
    fi

    # while 迴圈持續工作八小時
    while [ $Hours -le 8 ]  && [ $Week -lt 6 ]
    do
        echo -ne "星期 $Week, 努力工作 $Hours...\r"
        (( Hours++ ))
        sleep 0.2
    done

    # 忍受度 +1
    (( Endurance++ ))

    # 工作時數歸零
    Hours=0

    # 又過一天
    (( Week++ ))

    # 過了七天,問一是否要離職
    if [ $Week -gt 7 ]; then
        Week=1
        echo -ne "工作一週後,請問你有想辭職嗎?(輸入 YES 或按 ENTER 繼續): "
        read IsQuit
    fi
    sleep 0.2

    # 無法再忍,直接 break 脫離迴圈
    if [ $Endurance -gt 23 ]; then
        echo -e "\n忍受不住,直接回家 ... "
        break
    fi

    # 唉!其實這行是為 continue 而 continue
    # 遇到這行,就會從迴圈的頭開始執行
    continue
    echo "這行是永遠不會被執行到的,因為上面有 continue "
done

# 離開迴圈給個訊息
echo "喔喔!你辭職了~你沒工作了,快找下一份吧!!" 

這個範例的最外層是一個 until 迴圈,配合這個範例這個迴圈的意思是直到(除非)辭職等於 YES (IsQuit等於YES),否則迴圈會一直的執行下去。

看完了範例程式和註解說明,直接來看結果吧!
如果有仔細看,應該不難看出其實我在範例程式中留了兩條出路,第一條是當使用者輸入 YES 時,就會離開迴圈。第二條則是,忍受度(Endurance),當忍受度超過 23 時,就會使用 break ,強制脫離迴圈了!

結果一:直接爆掉,讓忍受度超過 23 ,走 break 那條路脫離迴圈:

結果二:在第二週使用者輸入 YES ,脫離迴圈:

謝謝謝謝謝謝謝謝

鐵人賽文章分享
12上一篇 與 while 相反的 until
14下一篇 可以提高if-then-else的Bash case


上一篇
[Shell Script] Day12-與 while 相反的 until
下一篇
[Shell Script] Day14-可以提高if-then-else的 switch case
系列文
快快樂樂學會讓電腦幫我做事27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
timloo
iT邦研究生 2 級 ‧ 2013-10-04 15:45:39

用什麼軟體錄製的呢?

是gif嗎?

pajace2001 iT邦研究生 1 級 ‧ 2013-10-04 20:42:27 檢舉

我是用 LICEcap 錄的 GIF 圖檔 謝謝

我要留言

立即登入留言