那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

bash腳本中的循環功能

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

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

for 循環

for 循環有兩種不同的寫法:

  • c 語言樣式的 for 循環;
  • 列表中使用的 for 循環。

c 語言樣式的 for 循環

如果你熟悉 c 或者 c++編程語言,那么對于如下循環應該不會陌生:

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

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

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

上述代碼中,首先將整型變量 i 初始化為 0,然后設置循環條件(i<10),如果條件為真,則執行循環,打印 Hello Friend,并將變量 i 遞增 1,然后進行下一次循環,知道 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 循環

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

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

執行一下,其輸出如下:

$ ./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 循環

while 循環是 bash 中另一個應用很廣泛的循環,其語法如下:

while [ condition ]; do
    [COMMANDS]
done

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

#!/bin/bash


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

其執行結果如下:

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

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

until 循環

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

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

until [ condition ]; do
    [COMMANDS]
Done

until 循環與 while 循環之間的主要區別在于循環條件。當循環條件為真時,while 循環會繼續,但是,當循環條件為假時,until 循環才會繼續。

比如上面我們寫的 3x10.sh 腳本,我們使用 until 循環來實現,如下:

#!/bin/bash


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

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

循環的具體應用

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

打印數組的內容

在此之前,我們假定大家了解 bash 中的數組

遍歷數組,for 循環通常是最首要的選擇。

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

#!/bin/bash


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

執行一下,結果如下:

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

在循環中使用 break 和 continue

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

break 將會終止循環,并將程序控制轉到循環后的下一個命令或指令。

比如,下面的循環只會打印從 1 到 3:

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

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

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

執行結果如下:

$ ./odd.sh
1
3
5
7
9

無限循環

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

例如,有人可能希望創建一個循環,以降序打印數字1到10,結果可能會錯誤地創建以下無限循環:

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

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

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

在某些情況下,我們可能希望有意創建無限循環,以等待系統滿足外部條件。如下所示:

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

如果想要創建一個無限 while 循環,可參考如下:

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

    關注

    180

    文章

    7614

    瀏覽量

    137713
  • 循環
    +關注

    關注

    0

    文章

    92

    瀏覽量

    16042
  • 腳本
    +關注

    關注

    1

    文章

    391

    瀏覽量

    14938
  • Bash
    +關注

    關注

    0

    文章

    57

    瀏覽量

    10206
收藏 人收藏

    評論

    相關推薦

    開發人員必須具備的Bash腳本知識

    您可以使用 Bash 腳本自動執行各種任務。掌握基礎知識并開始您的 Bash 腳本之旅。
    發表于 09-27 09:09 ?446次閱讀

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

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

    bash腳本的test命令詳解

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

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

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

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

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

    高級Bash 腳本編程指南

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

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

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

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

    默認情況下,bash腳本不會打印執行的每個命令,這個有時候不太方面。
    的頭像 發表于 06-22 14:44 ?4603次閱讀

    Raspberry Pi Bash Shell 腳本簡介

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

    如何在bash shell腳本接受參數

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

    bash如何創建函數

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

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

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

    BASH shell腳本篇—條件命令

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

    BASH shell腳本篇—函數

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

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

    Bash Shell腳本,可以使用多種方法來對文件進行操作,包括讀取文件或寫入文件。
    的頭像 發表于 10-23 16:51 ?691次閱讀
    百家乐官网棋牌正式版| 线上百家乐开户| 博彩百家乐官网规则| 宝马会在线娱乐城| 太阳城丝巾| 玩百家乐游戏的最高技巧| 百家乐软件骗人吗| 利澳百家乐官网的玩法技巧和规则 | 大发888娱乐游戏充值| 新东方百家乐的玩法技巧和规则| 乐九百家乐娱乐城| 太阳城百家乐投注| 百家乐官网计划软件| 百家乐官网唯一能长期赢钱的方法 | 龙虎斗游戏| 一路发娱乐场| 大发娱乐城888| 炸金花棋牌游戏| 斗地主棋牌游戏| 威尼斯人娱乐场棋牌| 威尼斯人娱乐场 赌场网址| 太阳城酒店| 大发888出纳柜台| 大发888官网充值| 欢乐谷娱乐城信誉| 二八杠口诀| 百家乐官网数学规律| 至尊百家乐官网年代| 澳门百家乐官网赢钱公式不倒翁| 任我赢百家乐官网软件中国有限公司| 百家乐官网平台信誉| 稳赢百家乐官网的玩法技巧| 百家乐官网机器出千| 旅百家乐官网赢钱律| 网络百家乐怎么作弊| 百家乐五湖四海娱乐| 威尼斯人娱乐城游戏平台| 水果机定位器| 杂多县| 赌场百家乐官网代理| 手机百家乐官网游戏|