日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 探索之旅 | 第五部分第五课:循环往复,Shell 开路

發(fā)布時間:2025/3/21 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 探索之旅 | 第五部分第五课:循环往复,Shell 开路 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

-- 作者 謝恩銘 轉載請注明出處

內容簡介


  • 前言
  • while 循環(huán)
  • until 循環(huán)
  • for 循環(huán)
  • 總結
  • 第五部分第六課預告
  • 1. 前言


    上一課 Linux探索之旅 | 第五部分第四課:條件一出,Shell不服 中我們學習了 Shell 中的條件語句。

    好吧,我承認,最近幾課的標題有點「雷人」...

    有了上一課的基礎,這一課將是很輕松的。

    我們來學習一個所有編程語言都有的要素:循環(huán)語句。

    循環(huán)語句使我們得夠重復一個代碼塊任意多次。這么有用的機制,Shell 語言當然支持。

    Shell 中,主要的循環(huán)語句有三種:while 循環(huán),until 循環(huán) 和 for 循環(huán)。我們一一來學習。

    2. while 循環(huán)


    在 Shell 中,我們最常用的循環(huán)是 while 循環(huán)。

    while 是英語「當... 的時候;在… 期間」的意思。

    while 循環(huán)的邏輯是這樣的:

    while [ 條件測試 ] do做某些事 done復制代碼

    do 是英語「做」的意思。
    done 是英語「完成」的意思。

    當然了,我們也可以像在 if 語句中那樣,把 關鍵字 do 放到與條件測試同一行上,但是之間要加分號,如下:

    while [ 條件測試 ]; do做某些事 done復制代碼

    while 循環(huán)流程圖:

    while 循環(huán)流程圖

    我們來寫一個程序,它會請求用戶輸入「 yes 」(英語「是」的意思),如果用戶沒有輸入任何字符或者輸入的字符串不是 「yes」,那么程序就一直請求。

    首先,我們創(chuàng)建一個名叫 「 loop.sh 」的文件( loop 是英語「循環(huán)」的意思)。

    vim loop.sh復制代碼

    在這個文件中輸入以下內容:

    #!/bin/bashwhile [ -z $response ] || [ $response != 'yes' ] doread -p 'Say yes : ' response done復制代碼

    response 是英語「回答」的意思。
    say 是英語「說」的意思。

    運行:

    我們做了兩個條件測試:

    • response是否是空 :-z $response
    • response 是否不等于「yes」:$response != 'yes'

    因為這兩個條件測試之間是用 || (邏輯或)連接的,因此只要兩個條件有一個成立,整個條件測試即成立,就會執(zhí)行 do 和 done 之間的語句。

    可以看到,這個程序非常「任性」,只要我們輸入的不是「 yes 」,它就不停止輸出「 Say yes : 」。真是「咄咄逼人」...

    3. until 循環(huán)


    與 while 這個關鍵字相反的有一個 until 關鍵字,until 在英語中是 「直到」的意思。

    它也可以實現(xiàn)循環(huán),只不過邏輯和 while 循環(huán)正好相反。

    until 循環(huán)流程圖:

    until 循環(huán)流程圖

    我們可以用 until 來改寫一下上面的程序:

    #!/bin/bashuntil [ "$response" = 'yes' ] doread -p 'Say yes : ' response done復制代碼

    運行結果和 while 循環(huán)那個是一樣的。

    4. for 循環(huán)


    for 是英語「對于」的意思。

    首先,我們要提醒已經(jīng)學過主流編程語言(如 C語言,Java,等等)的讀者,Shell 中的 for 循環(huán)和你已經(jīng)習慣的 for 循環(huán)方式略有不同。

    我們一起來學習吧。

    遍歷列表


    for 循環(huán)可以遍歷一個「取值列表」,基本的邏輯如下:

    for 變量 in '值1' '值2' '值3' ... '值n' do做某些事 done復制代碼

    in 是英語「在... 之中」的意思。

    for 循環(huán)流程圖:

    for 循環(huán)流程圖

    我們來寫一個例子:

    #!/bin/bashfor animal in 'dog' 'cat' 'pig' doecho "Animal being analyzed : $animal" done復制代碼

    「 Animal being analyzed 」是英語「正在被分析的動物」的意思。

    運行:

    可以看到,animal 這個變量依次取了 'dog'(狗), 'cat'(貓), 'pig'(豬) 這三個值。

    for 循環(huán)的取值列表不一定要在代碼中定義好,我們也可以用一個變量,如下例:

    #!/bin/bashlistfile=`ls`for file in $listfile doecho "File found : $file" done復制代碼

    「 File found 」是英語「找到的文件」的意思。

    運行:

    如你所見,上面的程序列出了當前目錄下所有的文件。

    我們還可以簡化上面的程序,不需要用到 listfile 這個變量:

    #!/bin/bashfor file in `ls` doecho "File found : $file" done復制代碼

    我們可以再改進這個程序,讓它復制當前目錄下的文件,并且把每個副本的名字修改為「現(xiàn)有名字 + -copy」 (copy 是英語「拷貝」的意思):

    #!/bin/bashfor file in `ls` docp $file $file-copy done復制代碼

    運行:

    可見,Shell 非常強大。

    更常規(guī)的 for 循環(huán)


    剛才我們看到的 for 循環(huán),和主流編程語言中的語法略有不同,不過我們可以借助 seq 命令,來實現(xiàn)類似主流編程語言中的 for 循環(huán)的語法。

    seq 是 sequence 的縮寫,是英語「序列」的意思。

    來寫一個例子:

    #!/bin/bashfor i in `seq 1 10` doecho $i done復制代碼

    運行:

    以上程序中,「 seq 1 10 」會返回一個取值列表,是從 1 到 10 的整數(shù)值。因此,echo 就會遍歷輸出 1 到 10 這 10 個整數(shù)。

    我們也可以修改默認的取值間隔 ( 1 ),改成我們需要的數(shù)值,如下:

    #!/bin/bashfor i in `seq 1 2 10` doecho $i done復制代碼

    運行:

    以上程序中,「 seq 1 2 10 」會返回一個取值列表,是從 1 到 10 的整數(shù)值,但是取值間隔是 2,echo 就會遍歷輸出 1 到 10 這 10 個整數(shù)中的 1,3,5,7,9 這5個整數(shù)。

    5. 總結


  • 我們使用循環(huán)語句來重復執(zhí)行一系列指令。

  • while 循環(huán)在條件滿足的情況下可以一直重復執(zhí)行。其中的條件測試語句的機制和上一課的條件語句中的一樣。

  • until 循環(huán)和 while 循環(huán)的邏輯正好相反。

  • for 循環(huán)可以遍歷一個「取值列表」,來依次執(zhí)行相應的指令。在 for 循環(huán)內部,變量的取值會逐步變化。

  • 6. 第五部分第六課預告


    今天的課就到這里,一起加油吧!

    下一課我們學習:一朝Shell函數(shù)傾,斗轉星移任我行


    微信公眾號「程序員聯(lián)盟」ProgrammerLeague
    我是謝恩銘,在巴黎奮斗的軟件工程師。
    我的簡介
    我的經(jīng)歷
    熱愛生活,喜歡游泳,略懂烹飪。
    人生格言:“向著標桿直跑”

    總結

    以上是生活随笔為你收集整理的Linux 探索之旅 | 第五部分第五课:循环往复,Shell 开路的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。