0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

bash腳本中的循環(huán)功能

CHANBAEK ? 來源:TIAP ? 作者:TIAP ? 2022-12-14 17:30 ? 次閱讀

循環(huán)是 bash 腳本中一個很重要的功能,用途廣泛。本篇文章我們介紹三種不同的循環(huán),然后利用循環(huán)遍歷數(shù)組。

for 循環(huán)

for 循環(huán)有兩種不同的寫法:

  • c 語言樣式的 for 循環(huán);
  • 列表中使用的 for 循環(huán)。

c 語言樣式的 for 循環(huán)

如果你熟悉 c 或者 c++編程語言,那么對于如下循環(huán)應(yīng)該不會陌生:

for ((initialize ; condition ; increment)); do
    [COMMANDS]
done

根據(jù)上述語法,我們寫一個例子,打印 Hello Friend 十次:

for ((i = 0 ; i < 10 ; i++)); do
    echo "Hello Friend"
done

上述代碼中,首先將整型變量 i 初始化為 0,然后設(shè)置循環(huán)條件(i<10),如果條件為真,則執(zhí)行循環(huán),打印 Hello Friend,并將變量 i 遞增 1,然后進行下一次循環(huán),知道 i<10不再滿足。

$ bash hello.sh 
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend

列表中使用的 for 循環(huán)

列表循環(huán)是 for 循環(huán)的一種變體,這在處理列表或者數(shù)組的時候特別方便,其語法如下:

for item in [LIST]; do
    [COMMANDS]
done

比如,我們重寫一下上面的那個例子:

for i in {1..10}; do
    echo "Hello Friend"
done

另一個例子,下面腳本 var.sh 將打印在 /var 目錄下的所有文件和目錄:

#!/bin/bash


for i in /var/*; do
    echo $i 
done

執(zhí)行一下,其輸出如下:

$ ./var.sh
/var/backups
/var/cache
/var/crash
/var/lib
/var/local
/var/lock
/var/log
/var/mail
/var/metrics
/var/opt
/var/run
/var/snap
/var/spool
/var/tmp

while 循環(huán)

while 循環(huán)是 bash 中另一個應(yīng)用很廣泛的循環(huán),其語法如下:

while [ condition ]; do
    [COMMANDS]
done

作為演示,我創(chuàng)建一個名為 3x10.sh 的腳本,用于打印前10個3的倍數(shù):

#!/bin/bash


num=1
while [ $num -le 10 ]; do
echo $(($num * 3))
num=$(($num+1))
done

其執(zhí)行結(jié)果如下:

$ ./3x10.sh
3
6
9
12
15
18
21
24
27
30

上述腳本中,首先將變量 num 初始化為 1,然后設(shè)定循環(huán)條件為 num 小于或等于 10。在循環(huán)體中,打印 num 乘以 3,然后將 num 遞增 1。

until 循環(huán)

如果你有 c/c++ 編程背景,那你可能會不自覺的找 do-while 循環(huán)。但是,在 bash 中并不存在 do-while 循環(huán)。

bush 中存在另一種循環(huán),即 until 循環(huán),其與 while 循環(huán)具有相同的語法:

until [ condition ]; do
    [COMMANDS]
Done

until 循環(huán)與 while 循環(huán)之間的主要區(qū)別在于循環(huán)條件。當(dāng)循環(huán)條件為真時,while 循環(huán)會繼續(xù),但是,當(dāng)循環(huán)條件為假時,until 循環(huán)才會繼續(xù)。

比如上面我們寫的 3x10.sh 腳本,我們使用 until 循環(huán)來實現(xiàn),如下:

#!/bin/bash


num=1
until [ $num -gt 10 ]; do
echo $(($num * 3))
num=$(($num+1))
done

大家應(yīng)該可以注意到,上面的循環(huán)條件為 $num -gt 10,為前一個例子中 -le 的否定。

循環(huán)的具體應(yīng)用

上面我們介紹了 bash 中循環(huán)的用法,下面在實際例子中介紹一下循環(huán)的使用。

打印數(shù)組的內(nèi)容

在此之前,我們假定大家了解 bash 中的數(shù)組。

遍歷數(shù)組,for 循環(huán)通常是最首要的選擇。

如下腳本 prime.sh 中,將會遍歷并打印出數(shù)組中的所有元素:

#!/bin/bash


prime=(2 3 5 7 11 13 17 19 23 29)
for i in "${prime[@]}"; do
echo $i
done

執(zhí)行一下,結(jié)果如下:

$ ./prime.sh
2
3
5
7
11
13
17
19
23
29

在循環(huán)中使用 break 和 continue

有時候我們可能希望提前退出循環(huán),或者跳過本次循環(huán)。那么此時需要分別使用 break 和 continue。

break 將會終止循環(huán),并將程序控制轉(zhuǎn)到循環(huán)后的下一個命令或指令。

比如,下面的循環(huán)只會打印從 1 到 3:

for ((i=1;i<=10;i++)); do
    echo $i
    if [ $i -eq 3 ]; then
        break
    fi
done

使用 continue 語句會跳過本次循環(huán),繼續(xù)執(zhí)行下次循環(huán)。比如,下面腳本 odd.sh 只會打印從 1 到 10 之間的奇數(shù),而跳過偶數(shù):

#!/bin/bash
for ((i=0;i<=10;i++)); do
    if [ $(($i % 2)) -ne 1 ]; then
        continue
    fi
    echo $i
done

執(zhí)行結(jié)果如下:

$ ./odd.sh
1
3
5
7
9

無限循環(huán)

無限循環(huán)是一個永遠運行的循環(huán),其循環(huán)條件始終為真。大多數(shù)情況下,無限循環(huán)是因為邏輯錯誤造成的bug。

例如,有人可能希望創(chuàng)建一個循環(huán),以降序打印數(shù)字1到10,結(jié)果可能會錯誤地創(chuàng)建以下無限循環(huán):

for ((i=10;i>0;i++)); do
    echo $i
done

上述錯誤是將 i 遞增 1。要修復(fù)這個問題需要將遞增改為遞減 i--:

for ((i=10;i>0;i--)); do
echo $i
done

在某些情況下,我們可能希望有意創(chuàng)建無限循環(huán),以等待系統(tǒng)滿足外部條件。如下所示:

for ((;;)); do
[COMMANDS]
done

如果想要創(chuàng)建一個無限 while 循環(huán),可參考如下:

while [ true ]; do
    [COMMANDS]
done
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7581

    瀏覽量

    135543
  • 循環(huán)
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    15938
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    383

    瀏覽量

    14792
  • Bash
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    10150
收藏 人收藏

    評論

    相關(guān)推薦

    開發(fā)人員必須具備的Bash腳本知識

    您可以使用 Bash 腳本自動執(zhí)行各種任務(wù)。掌握基礎(chǔ)知識并開始您的 Bash 腳本之旅。
    發(fā)表于 09-27 09:09 ?402次閱讀

    bash腳本檢查子字符串的方法

    我們在寫 bash 腳本的時候,假如有一個字符串,我們想檢查其中是否包含另一個子字符串,那這個時候需要怎樣做呢?
    發(fā)表于 11-24 15:25 ?1584次閱讀
    <b class='flag-5'>bash</b><b class='flag-5'>腳本</b><b class='flag-5'>中</b>檢查子字符串的方法

    bash腳本的test命令詳解

    bash 腳本的 test? 命令用于檢查表達式的有效性,檢查命令或表達式為 true 或者 false。此外,它還可以用于檢查文件的類型和權(quán)限。
    發(fā)表于 11-24 15:32 ?3635次閱讀
    <b class='flag-5'>bash</b><b class='flag-5'>腳本</b><b class='flag-5'>中</b>的test命令詳解

    如何在bash shell腳本中使用變量

    如果你使用編程語言編寫過程序,那么一定接觸過變量。而在 bash 腳本的編寫時,變量也是一個很重要的概念。今天我們分享一下如何在 bash 腳本中使用變量。
    發(fā)表于 12-02 16:32 ?1963次閱讀
    如何在<b class='flag-5'>bash</b> shell<b class='flag-5'>腳本</b>中使用變量

    如何通過命令行將變量以參數(shù)的形式傳遞給bash腳本

    我們在上一篇文章中介紹了如何在 bash 腳本中使用變量,可以響應(yīng)各種數(shù)據(jù)以及接收用戶輸入。
    發(fā)表于 12-02 16:38 ?1296次閱讀
    如何通過命令行將變量以參數(shù)的形式傳遞給<b class='flag-5'>bash</b><b class='flag-5'>腳本</b>

    高級Bash 腳本編程指南

    高級Bash 腳本編程指南
    發(fā)表于 10-26 08:33 ?7次下載
    高級<b class='flag-5'>Bash</b> <b class='flag-5'>腳本</b>編程指南

    命令行重度用戶需要的實用BASH腳本

    今天,我偶然發(fā)現(xiàn)了一組適用于命令行重度用戶的實用 BASH 腳本,這些腳本被稱為 Bash-Snippets,它們對于那些整天都與終端打交道的人來說可能會很有幫助。
    的頭像 發(fā)表于 08-30 10:37 ?2536次閱讀

    虛擬機:Bash Shell腳本打印出執(zhí)行的命令

    默認(rèn)情況下,bash腳本不會打印執(zhí)行的每個命令,這個有時候不太方面。
    的頭像 發(fā)表于 06-22 14:44 ?4459次閱讀

    Raspberry Pi Bash Shell 腳本簡介

      拋開潛在的麻煩不談,Bash 可以是一個非常強大的工具,讓您可以自動執(zhí)行各種任務(wù)。在即將發(fā)表的文章,我將展示如何使用 Bash 腳本以及一些硬件技巧來自動化我的 Raspberr
    的頭像 發(fā)表于 08-15 15:08 ?1088次閱讀
    Raspberry Pi <b class='flag-5'>Bash</b> Shell <b class='flag-5'>腳本</b>簡介

    如何在bash shell腳本接受參數(shù)

    終端命令通常包含一些參數(shù),在使用的時候可以提供不同的參數(shù)來確定命令的執(zhí)行方式。POSIX規(guī)范包含了用于命令行接口的選項。這也是與最早的UNIX應(yīng)用程序建立的一個由來已久的約定,所以當(dāng)你在寫bash腳本的時候,需要知道如何在
    的頭像 發(fā)表于 12-09 17:34 ?2583次閱讀

    bash如何創(chuàng)建函數(shù)

    當(dāng)你的 bash 腳本中代碼非常多的時候,會看起來很混亂,其中有部分代碼有可能是重復(fù)的。這個時候,可以使用函數(shù)來避免重復(fù)的代碼。
    的頭像 發(fā)表于 12-14 17:31 ?1110次閱讀

    Bash腳本特殊變量$0是什么?

    Bash 腳本,`$0` 是一個特殊變量,它代表當(dāng)前腳本的路徑和名稱。這個變量用于表示腳本自身,它是
    的頭像 發(fā)表于 05-12 14:41 ?1782次閱讀

    BASH shell腳本篇—條件命令

    這篇文章介紹下BASH shell的條件相關(guān)的命令,包括:if, case, while, until, for, break, continue。
    的頭像 發(fā)表于 10-11 15:21 ?519次閱讀
    <b class='flag-5'>BASH</b> shell<b class='flag-5'>腳本</b>篇—條件命令

    BASH shell腳本篇—函數(shù)

    函數(shù)是代碼重用的最重要方式。Bash函數(shù)可以定義為一組命令,在bash腳本多次調(diào)用。
    的頭像 發(fā)表于 10-20 16:31 ?834次閱讀

    BASH shell腳本篇—文件處理介紹

    Bash Shell腳本,可以使用多種方法來對文件進行操作,包括讀取文件或?qū)懭胛募?/div>
    的頭像 發(fā)表于 10-23 16:51 ?530次閱讀