bash for循環_Bash 中的 For 循環

c1be46f0c899970e68deeb0273c80365.png

循環是編程語言的基本概念之一。當你想要一遍又一遍地運行一系列命令直到達到某個條件后終止退出時,循環很方便。

在諸如 Bash 之類的腳本語言中,循環對于自動執行重復性任務非常有用。

在 Bash 腳本中有3個基本的循環結構,for 循環, while 循環,until 循環。

在本教程中,我們將介紹 Bash 中 for 循環的基礎知識以及用于改變循環流的 break 和 continue 語句。

標準 Bash for 循環

for 循環遍歷項列表并執行給定的命令集。

Bash for 循環采用以下形式:

for item in [LIST]do [COMMANDS]done

列表可以是由空格分隔的一系列字符串,一系列數字,命令輸出,數組等。

循環遍歷字符串

在下面的示例中,循環將遍歷字符串列表中的每個項目,使用變量 element 代表當前項目。

for element in Hydrogen Helium Lithium Berylliumdo echo "Element: $element"done

循環將產生以下輸出:

Element: HydrogenElement: HeliumElement: LithiumElement: Beryllium

循環遍歷數字范圍

您可以使用序列表達式通過定義范圍的起點和終點來指定數字或字符的范圍。序列表達式采用以下形式:

{START..END}

在下面的示例中,循環將遍歷從 0 到 3 的所有數字。

for i in {0..3}do echo "Number: $i"doneNumber: 0Number: 1Number: 2Number: 3

從 Bash 4 開始,還可以在使用范圍時指定增量。表達式采用以下形式:

{START..END..INCREMENT}for i in {0..20..5}do echo "Number: $i"doneNumber: 0Number: 5Number: 10Number: 15Number: 20

循環數組元素

您還可以使用 for 循環迭代元素數組:

在下面的示例中,我們定義一個數組 BOOKS 并迭代數組的每個元素。

BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby')for book in "${BOOKS[@]}"; do echo "Book: $book"doneBook: In Search of Lost TimeBook: Don QuixoteBook: UlyssesBook: The Great Gatsby

C 風格的 Bash for 循環

C-style for 循環的語法采用以下形式:

for ((INITIALIZATION; TEST; STEP))do [COMMANDS]done

INITIALIZATION 部分僅在循環開始時執行一次。然后,評估 TEST 部分。如果為假,則 for 循環終止。如果 TEST 為真,則執行 for 循環體內的命令并更新 STEP 部分。

在下面的代碼中,循環通過初始化星型 i = 0 ,然后在每次迭代之前檢查是否 i ≤ 10 。如果為 true ,則打印當前值 i 并將變量遞增 i 1 (i++) ,否則循環終止。

for ((i = 0 ; i <= 1000 ; i++)); do echo "Counter: $i"done

循環迭代 1001 次并將產生以下輸出:

Counter: 0Counter: 1Counter: 2...Counter: 998Counter: 999Counter: 1000

break 和 continue

break 和 continue 語句可用于控制 for 循環執行。

break 語句

break 語句終止當前循環并將程序控制傳遞給終止語句后面的語句。它通常用于在滿足某個條件時終止循環。

在下面的示例中,一旦當前迭代項等于 ‘Lithium’ ,循環的執行將終止。

for element in Hydrogen Helium Lithium Beryllium; do if [[ "$element" == 'Lithium' ]]; then break fi echo "Element: $element"doneecho 'All Done!'Element: HydrogenElement: HeliumAll Done!

continue 語句

continue 語句退出循環的當前迭代,并將程序控制傳遞給循環的下一次迭代。

在下面的示例中,我們迭代一系列數字,當當前迭代項等于 ‘2’ 時, continue 語句將導致執行返回到循環的開頭并繼續下一次迭代。

for i in {1..5}; do if [[ "$i" == '2' ]]; then continue fi echo "Number: $i"doneNumber: 1Number: 3Number: 4Number: 5

For 循環示例

重命名文件名中包含空格的文件

下面的示例演示如何使用 Bash for 循環通過將空格替換為下劃線來重命名當前目錄中的所有文件,并在其名稱中包含空格。

for file in * *; do mv "$file" "${file// /_}"done

讓我們逐行分解代碼:

  • 第一行創建一個 for 循環,并遍歷其名稱中帶有空格的所有文件的列表。表達式 * * 創建列表。
  • 第二行適用于列表中的每個項目,并將文件移動到新的文件,用下劃線 (_) 替換空格。該部分 ${file// /_ } 使用 shell 參數擴展來用字符串替換參數中的模式。
  • done 表示循環段的結束。

更改文件擴展名

以下示例顯示如何使用 Bash for 循環通過將文件擴展名從 .jpeg 替換為 .jpg 來重命名當前目錄中以 .jpeg 結尾的所有文件。

for file in *.jpeg; do mv -- "$file" "${file%.jpeg}.jpg"done

讓我們逐行分析代碼:

  • 第一行創建一個 for 循環,并遍歷一個包含 .jpeg 結尾的所有文件的列表。
  • 第二行適用于列表中的每個項目,并將文件移動到一個用 .jpg 替換 .jpeg 的新文件。該部分 ${file%.jpeg }使用 shell 參數擴展從文件名中刪除 .jpeg 部分。
  • done 表示循環段的結束。

結論

到目前為止,您應該很好地理解如何使用 bash for 循環遍歷列表。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276824.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276824.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276824.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Atlas Unknown Error

if("using Atlas" and "there are some js codes in HEAD tag") then "Unknown Error" solution: copy the js codes to other position 轉載于:https://www.cnblogs.com/JoeHou/archive/2009/02/03/1383231.html

軟件工程師的6年總結

“又是一年畢業時”&#xff0c;看到一批批學子離開人生的象牙塔&#xff0c;走上各自的工作崗位&#xff1b;想想自己也曾經意氣風發、躊躇滿志&#xff0c;不覺感嘆萬千……本文是自己工作6年的經歷沉淀或者經驗提煉&#xff0c;希望對所有的軟件工程師們有所幫助&#xff0c…

linux 信號_Linux的信號和線程

Linux的信號和線程-Tech Talk 讓技術發出聲音?www.ttalk.im什么是線程線程&#xff0c;有時被稱為輕量級進程(Lightweight Process&#xff0c;LWP&#xff09;&#xff0c;是程序執行流的最小單元。一個標準的線程由線程ID&#xff0c;當前指令指針(PC&#xff09;&#xff0…

tomcat部署教程

參考博客地址&#xff1a; https://blog.csdn.net/xiaoyu940601/article/details/54950673轉載于:https://www.cnblogs.com/liuniublogs/p/10019068.html

選擇文字就能選擇復選框

更方便的單選框下面為腳本顯示區  看看下面的選擇框&#xff0c;似乎沒有什么不同的。微妙之處在于&#xff0c;選擇項目時不必非得在框內點擊鼠標了&#xff0c;在文本上選擇即可。不信試一試吧。 經常來這里 偶爾來看看 轉載于:https://www.cnblogs.com/leevane/archive/200…

python 數據結構

一. 深入鏈表 先來介紹一些鏈表具備的一些常用方法&#xff1a; append(x) : 把一個元素添加到鏈表的結尾 extend(L) : 將另外一個鏈表合并到該鏈表中 insert(i,x) : 插入一個元素到指定位置的前面 remove(x) : 刪除鏈表中第一個值為x的元素 如果沒有這樣的元素 則返回錯誤 pop…

python筆試編程題_Python——面試編程題

一、python----輸出1-100之和的方法 方法一&#xff1a; print(sum(range(1,101))) 方法二&#xff1a; from functools import reduce print(reduce(lambda x, y: xy, range(101))) 方法三: t0 for i in range(101): ti print(t) 方法四&#xff1a; print(sum([x for x in ra…

go語言項目優化(經驗之談)

1 Go的應用場景 在斗魚我們將GO的應用場景分為以下三類&#xff0c;緩存類型數據&#xff0c;實時類型數據&#xff0c;CPU密集型任務。這三類應用場景都有著各自的特點。 ● 緩存類型數據在斗魚的案例就是我們的首頁&#xff0c;列表頁&#xff0c;這些頁面和接口的特點是不同…

AddTransient、AddSingleton、AddScoped 三者都應該在什么場景下使用

網上隨便一搜&#xff0c;能搜出一大堆對三者進行區別分析的文章&#xff0c;但是呢&#xff0c;理論是一回事&#xff0c;實際使用又是另外一回事&#xff0c;到底在何種場景下應該使用何種注入方式呢&#xff1f; 通過這篇文章和我自身的實際經驗&#xff0c;來說一說實際應用…

python交互界面用圖片當背景_wxPython實現窗口用圖片做背景

本文實例為大家分享了wxPython實現窗口用圖片做背景的具體代碼&#xff0c;供大家參考&#xff0c;具體內容如下 效果圖&#xff1a;實現代碼&#xff1a; #!/usr/bin/env python # -*- encoding:utf-8 -*- import wx class MyPanel(wx.Panel): def __init__(self,parent,id): …

css超出隱藏顯示省略號

width: 300px; overflow: hidden;/*超出部分隱藏*/ text-overflow:ellipsis;/* 超出部分顯示省略號 */ white-space: nowrap;/*規定段落中的文本不進行換行 */ 轉載于:https://www.cnblogs.com/songmengwen1124/p/11354620.html

信號為E時,如何讓語音識別脫“網”而出?

歡迎大家前往騰訊云社區&#xff0c;獲取更多騰訊海量技術實踐干貨哦~ 本文由騰訊教育云發表于云社區專欄 一般沒有網絡時&#xff0c;語音識別是這樣的 ▽ 而同等環境下&#xff0c;嵌入式語音識別&#xff0c;是這樣的 ▽ 不僅可以幫您邊說邊識、出口成章&#xff0c;有個性化…

TwinSocketStream

使用TwinSocketStream 當為一個blocking連接實現一個線程時,你必須確定在連接的另一端的socket是準備寫還是讀.Blocking連接不會通知socket當它準備好寫或讀操作的時候.想看看連接是否準備好,使用TWinSocketStream對象.TWinSocketStream提供一個方法去幫助調整讀或寫操作時間的…

c 字符串轉數字_C語言實現十進制轉216進制、十六進制轉十進制

1、十進制轉2&#xff5e;16進制【問題描述】從鍵盤輸入十進制整數num及轉換的進制數base&#xff0c;將整數num轉換為base進制(base取值范圍為 2&#xff5e;16)。方法為&#xff1a;十進制數除base取余法&#xff0c;即十進制數除以base&#xff0c;余數為權位上的數&#xf…

Mysql循環語句,死循環解決辦法

delimiter // #定義標識符為雙斜杠 drop procedure if exists test; #如果存在test存儲過程則刪除 create procedure test() #創建無參存儲過程,名稱為testbegindeclare i int; #申明變量set i 0; …

QML-關于Qt.rgba()顏色無法正常顯示問題

GitHub:八至 作者&#xff1a;狐貍家的魚 本文鏈接&#xff1a;關于Qt.rgba()顏色的正確寫法 當在正常給color屬性寫顏色的時候&#xff0c;用十六進制能正常顯示&#xff0c;但是用Qt.rgba()時&#xff0c;顏色無法正常顯示出來。 按照文檔的正常寫法&#xff1a; color: Qt.r…

一個簡單的LINQ TO XML, AJAX 例子[譯]

這個教程是用Visual Studio.net 2008建立&#xff0c;也可以使用VS2005&#xff0c;但你需要從這里下載安裝Microsofts ASP.NET AJAX Extensions&#xff0c;AJAX和LINQ是微軟目前主要焦點&#xff0c;兩個看上去不足為奇&#xff0c;但背后都隱藏著巨大的潛力和力量。在這個示…

1.ASP.NET Core介紹

優點&#xff1a; 1.跨平臺&#xff0c;高性能&#xff0c;開源&#xff0c;運行在.Net Core 或.Net Framework框架上&#xff08;asp.net core 3.0及以后只支持.Net Core&#xff09;。 2.各平臺上開發工具支持&#xff0c;能夠開發web應用&#xff0c;webapi&#xff0c;移動…

python3性能還低嗎_Python3 vs. Python2 大作戰,誰將是性能之王?

渲染 HTML 模板 django_html 測試將使用 Django 模板渲染引擎來構建一個 150x150 的 HTML 表格。 它利用了 Django 引擎的 Content 和 Template 類。如圖所示&#xff0c;Python 3.7 比 Python 2.7 快 1.19 倍&#xff0c;但除此之外&#xff0c;其他 Python 3 版本都沒有 Pyth…

python day08

一 文件處理補充 控制文件中光標移動 1 f.read(n): l.文件打開方式為文本模式的時,代表讀取N個字符 ll.文件打開方式為b模式時,讀取N個字節 強調:只有在read(n)模式下 N代表字符個數,除此之外的是以字節為單位 2 f.seek(): 光標移動是以字節為單位的整數移動. 三種模式:(分別為…