[Linux] shell腳本之循環

一、循環定義

一組被重復執行的語句稱之為 循環體,能否繼續重復,決定循環的終止條件。 循環語句 是由循環體及循環的終止條件兩部分組成的。

二、for循環

2.1 帶列表循環

語法
for 變量名 in 取值列表do  命令序列  done

花括號用法:

花括號{ }和seq在for循環的應用:
for i in {1..10..2} 1-10的奇數
for i in {0..10..2} 1-10的偶數
for i in {10..1} ?1-10倒序排列

for i in $(seq 10) ?1-10正序排列
for i in $(seq 10 -1 1) 1-10倒序排列
for i in $(seq 1 2 10) 1-10的奇數,中間為步長

?運用演示1:列表打印

? ?需求:打印一份一到十的數字列表

#!/bin/bashfor i in {1..10}
do
echo $i
done

運用演示二:分類打印

需求:打印一份 0-10以內的奇數列表

for i in {1..10..2}
do
echo $i
done

腳本
#!/bin/bash
for i in {1..10..2}
do
echo $i
done

?

?需求二:打印一份0-10以內的偶數列表

for i in {0..10..2}
> do
> echo $i
> done

用腳本寫
#!/bin/bash
for i in {0..10..2}
do
echo $i
done

?

運用演示三:累加求和?

需求:求從1加到10的和?

sum=0
for i in {1..10}
> do
> sum=$[sum+i]
> done
echo $sum
55

腳本求1加到100的和
#!/bin/bash
i=0
sum=0
for i in {1..100}
do
sum=$[sum +i]
let i++
done
echo $sum

?

?2.2 不帶列表循環

語法
for 變量名 
do
命令
done

?運用演示:打印hello

#!/bin/bash
for i
do
echo hello
done

注意:腳本需要執行權限,i也要賦予一個值?

2.3 類似c語言格式的循環

語法
for ((表達式1;表達式2;表達式3))
do
命令
done
表達式1:定義變量并賦值表達式2:決定是否循環表達式3:決定循環變量如何改變,決定循環什么時候結束

配合命令let使用

++	自身變量+1
--  自身變量-1
+=5	自身變量+5
-=5	自身變量-5
*=5	自身變量*5
/=5	自身變量/5
%=5	自身變量%5

運用演示:從1+到100

#!/bin/bash
i=0
sum=0
for ((i=0;i<=100;i++))
do
sum=$[sum+i]
done
echo $sum

三、while 循環

3.1 while 語法結構

語法
while   [ 判斷條件] 使用while循環滿足條件執行do,不滿足不執行 do       執行動作   while循環執行動作done         while循環結束標志

應用演示:求和

#!/bin/bash
i=0
sum=0
while [ $i -le 100 ]
do
sum=$[sum+i]
let i++
done
echo $sum

3.2 死循環語句

1.while? [1? -eq? 1]? ?判斷條件寫一個永久為真的條件?

? ? do? ? ? ?一直執行do內的命令

? ? done

2.while? true? ? ? ? 直接寫判斷條件為真

? ? do? ? ? ?一直執行do內的命令

? ? done

3.while :? ? ? ? ?判斷條件為冒號也表示死循環

? ? do? ? ? ?一直執行do內的命令?

? ? done

四、雙重循環及跳出循環

4.1?雙重循環的機制

單層循環:執行命令從上至下依次執行命令,進行條件判斷,如果沒有達到退出循環的要求,

便再次進行該操作

雙重循環:循環中嵌套循環(在這里我們將外面的循環稱作外部循環,嵌套在里面的叫內部循環)

當外部循環執行一次時,內部循環就要將自身的所有循環進行一遍,一整個雙重循環結束后,內部循環執行的次數等于自己本身循環的所有次數乘以外部循環的所有循環次數

運用演示:

#!/bin/bash#這是一個雙重循環的測試實驗for ((i=1;i<=5;i++))
doecho "=============這是外部循環執行的第 $i 次==================== "for  ((j=1;a<=5;j++))doecho  "這是內部循環執行的第 $j 次" done
done

打印九九乘法表

#!/bin/bash
for((i=1;i<=9;i++))
dofor((j=1;j<=i;j++))doecho -e "${i}*${j}=$[i*j]\t\c"done
echo
done

4.2 跳出循環

????????break跳出單個循環 break n 數字數字是幾代表跳出n層循環

????????continue終止某次循環中的命令,但是不會完全終止命令

????????exit 直接退出腳本

4.2.1 continue跳出循環?

1.表示滿足continue條件時跳出循環,但是不影響后續循環執行

舉例:
vim test1.sh         #創建腳本a.sh
腳本內容:
#!/bin/bash
for i in {1..10}  #for循環10次從i=1開始到i=10    
do
if [ $i -eq 3 ]  #if判斷語句,若$1等于3則執行then的內容
then 
continue         #當$i=3時跳出循環但不影響后面循環  
fi               #結束if語句
echo $i        #沒執行一次for循環輸出一次$i
done             #for循環結束語句
bash test1.sh        #調用shell執行腳本
輸出結果
1
2
4
5
6
7
8
9
10

4.2.2 break跳出循環

在某個循環中遇到break直接結束此次循環,但是不影響外邊嵌套的循環。

break? [數字] 結束數字中的幾次循環,若為2則結束自己所在循環和外邊嵌套的一層循環,若為3則結束自己所在循環和外邊嵌套的2層循環

舉例:
vim   a.sh     #創建a.sh腳本
腳本內容:
#!/bin/bash
for j in {1..3}      #第一層for循環,j=1,2,3各執行一次do的內容
do                   #第一層for循環的執行內容for i in {1..5}  #第二層for循環,i=1,2,3,4,5各執行一次do的內容do               #第二層for循環的執行內容  if [ $i -eq 3 ]  #第二層for循環中添加的if判斷語句,當$i=3是執行then內容then                break            #第二層for循環判斷語句執行命令,break結束循環fi               #if語句結束echo "$i"            #第二層for循環語句執行每循環一次輸出$idone                 #第二層for循環語句結束標志                
done                     #第一層for循環語句結束標志
bash a.sh                #調用bash執行a.sh腳本
執行結果:第二層執行在$i=3是結束了循環,所以只能輸出1和2,第一層for循環是循環3次,所以輸出了3次。
1
2
1
2
1
2

4.2.3 exit跳出腳本
#!/bin/bash
for j in {1..3}      #第一層for循環,j=1,2,3各執行一次do的內容
do                   #第一層for循環的執行內容for i in {1..5}  #第二層for循環,i=1,2,3,4,5各執行一次do的內容do               #第二層for循環的執行內容  if [ $i -eq 3 ]  #第二層for循環中添加的if判斷語句,當$i=3是執行then內容then#break            #第二層for循環判斷語句執行命令,break結束循環exit               第二層for循環判斷語句執行命令,exit結束循環fi               #if語句結束echo "$i"            #第二層for循環語句執行每循環一次輸出$idone                 #第二層for循環語句結束標志                
done                     #第一層for循環語句結束標志

?五、until循環

until循環與for,while循環不同的是,until循環是只要條件不符合就會一直循環,直到條件符合后才會退出循環

語句格式:until 條件測試操作  do    命令序列  done 

運用演示:求和

#!/bin/bash
i=0
sum=0
until [ $i -gt 100 ]
do
sum=$[sum+i]
let i++
done
echo $sum

總結:

1. 掌握好三種循環的用法(特別是until和前兩種循環對于條件判斷是相反的)?

2.for循環讀取文件時,如果遇到未按照默認分隔符隔開的文件,可以通過修改分隔符來實現正常讀取(但是先備份分隔符的默認值,再進行修改,最后進行還原)

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

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

相關文章

設計模式——狀態模式介紹

狀態模式是一種行為設計模式&#xff0c;它允許對象在內部狀態改變時改變它的行為。它基于對象的內部狀態而改變其行為&#xff0c;看起來好像修改了對象的類。 狀態模式的關鍵組件有三個&#xff1a;上下文(Context)、狀態(State)和具體狀態(Concrete State)。 下面是一個例…

年輕有為!2023兩院院士增選揭榜 45歲顏寧當選

大家好&#xff0c;我是極智視界&#xff0c;歡迎關注我的公眾號&#xff0c;獲取我的更多前沿科技分享 邀您加入我的知識星球「極智視界」&#xff0c;星球內有超多好玩的項目實戰源碼和資源下載&#xff0c;鏈接&#xff1a;https://t.zsxq.com/0aiNxERDq 通常&#xff0c;兩…

電商網站選擇云服務器要考慮什么?

極高的安全性 交易平臺最重要的是數據安全&#xff0c;這涉及到產品、用戶、平臺信息等&#xff0c;能夠保護數據隱私的安全&#xff0c;是網站交易的首要原則。 2020年&#xff0c;數據泄露、網絡滲透、大量數據被銷售、勒索軟件爆發......每個網站都可能成為黑客的目標&#…

CuratorFrameworkFactory.builder()方法可配置屬性

CuratorFrameworkFactory.builder()方法可以配置以下屬性&#xff1a; 1. connectString&#xff1a;ZooKeeper服務器的連接字符串。 2. sessionTimeoutMs&#xff1a;ZooKeeper會話超時時間。 3. connectionTimeoutMs&#xff1a;ZooKeeper連接超時時間。 4. retryPolicy&…

springboot自動重啟及SpringBoot Developer tools簡介

項目中引用了SpringBoot Developer tools&#xff0c;修改類后會自動重啟。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional&…

BTS-GAN:基于MRI和條件對抗性網絡的乳腺腫瘤計算機輔助分割系統

BTS-GAN: Computer-aided segmentation system for breast tumor using MRI and conditional adversarial networks BTS-GAN&#xff1a;基于MRI和條件對抗性網絡的乳腺腫瘤計算機輔助分割系統背景貢獻實驗方法Parallel dilated convolution module&#xff08;并行擴展卷積模塊…

逸學java【初級菜鳥篇】9.5枚舉

hi&#xff0c;我是逸塵&#xff0c;一起學java吧 枚舉是信息的標志和分類 當一個變量有幾種固定可能的取值時&#xff0c;就可以將它定義為類型的枚舉。 優點&#xff1a;代碼可讀性好&#xff0c;入參約束嚴謹&#xff0c;代碼優雅&#xff0c;是最好的信息分類技術&#x…

【AI讀論文】AutoML的8年回顧:分類、綜述與趨勢

論文標題&#xff1a;Eight years of AutoML: categorisation, review and trends 論文鏈接&#xff1a;https://link.springer.com/article/10.1007/s10115-023-01935-1 本文主要圍繞自動機器學習&#xff08;AutoML&#xff09;展開了系統性的文獻綜述&#xff0c;總結了該領…

【文末送書】重磅!這本30w人都在看的Python數據分析暢銷書:更新了!

歡迎關注博主 Mindtechnist 或加入【智能科技社區】一起學習和分享Linux、C、C、Python、Matlab&#xff0c;機器人運動控制、多機器人協作&#xff0c;智能優化算法&#xff0c;濾波估計、多傳感器信息融合&#xff0c;機器學習&#xff0c;人工智能等相關領域的知識和技術。關…

div中添加el-loading(局部loading的使用)

效果&#xff1a;在div中實現el-loading <div class"content-main">{{ hotList }}</div>getHotList(columnType) {this.$nextTick(() > {var loading this.$loading({lock: true,text: "努力加載中...",spinner: "el-icon-loading&qu…

揭示卡爾曼濾波器的威力

一、說明 作為一名數據科學家&#xff0c;我們偶爾會遇到需要對趨勢進行建模以預測未來值的情況。雖然人們傾向于關注基于統計或機器學習的算法&#xff0c;但我在這里提出一個不同的選擇&#xff1a;卡爾曼濾波器&#xff08;KF&#xff09;。 1960 年代初期&#xff0c;Rudol…

天池 機器學習算法(一): 基于邏輯回歸的分類預測

pytorch實戰 課時7 神經網絡 MSE的缺點&#xff1a;偏導值在輸出概率值接近0或者接近1的時候非常小&#xff0c;這可能會造成模型剛開始訓練時&#xff0c;偏導值幾乎消失&#xff0c;模型速度非常慢。 交叉熵損失函數&#xff1a;平方損失則過于嚴格&#xff0c;需要使用更合…

開始通過 Amazon SageMaker JumpStart 在亞馬遜云科技上使用生成式 AI

目前&#xff0c;生成式 AI 正受到公眾的廣泛關注&#xff0c;人們圍繞著許多人工智能技術展開討論。很多客戶一直在詢問有關亞馬遜云科技生成式 AI 解決方案的更多信息&#xff0c;本文將為您進行解答。 這篇文章通過一個真實的客戶使用案例概述了生成式 AI&#xff0c;提供了…

感恩節99句祝福語,感恩父母老師朋友親人朋友們,永久快樂幸福

1、流星讓夜空感動&#xff0c;生死讓人生感動&#xff0c;愛情讓生活感動&#xff0c;你讓我感動&#xff0c;在感恩節真心祝福你比所有的人都開心快樂。 2、感恩節到了&#xff0c;想問候你一下&#xff0c;有太多的話語想要說&#xff0c;但是不知從何說起&#xff0c;還是用…

定位鼠標懸浮才出現的元素

第一步&#xff1a;按F12進入開發者模式 第二步&#xff1a;點擊Sources. 第三步&#xff1a;鼠標進入&#xff0c;觸發懸浮框彈出&#xff0c;然后鼠標停止不要移動。 第四步&#xff1a;按F8 或者&#xff08;Ctrl\&#xff09;&#xff0c;正常情況下&#xff0c;此時頁…

讓SOLIDWORKS Composer動畫在PPT中隨意轉換

SOLIDWORKS Composer作為一款易學易用的技術圖解軟件&#xff0c;非常適合用來給客戶展示自己的產品。這里我們教大家如何將Composer文件插入大PPT中&#xff0c;并任意切換文件&#xff0c;用以給客戶展示不用的方案和產品。 1.首先大家要安裝SOLIDWORKS Composer Player 這個…

【2021集創賽】基于ARM-M3的雙目立體視覺避障系統 SOC設計

本作品參與極術社區組織的有獎征集|秀出你的集創賽作品風采,免費電子產品等你拿~活動。 團隊介紹 參賽單位&#xff1a;上海電力大學 隊伍名稱&#xff1a;駭行隊 總決賽獎項&#xff1a;二等獎 1.摘要 隨著信息技術的發展&#xff0c;AGV&#xff08;Automated Guided Vehic…

21款奔馳GLC260L升級HUD抬頭顯示 平視儀表信息

隨著科技飛速地發展&#xff0c;從汽車領域就可以看出&#xff0c;尤其是汽車的抬頭顯示器&#xff0c;一經推出就吸引了很多的車主。 升級HUD抬頭顯示&#xff0c;HUD與汽車系統進行完整的數據信息連接&#xff0c;整合成大數據&#xff0c;然后將一些重要信息映射到車窗玻璃…

中低壓MOSFET 2N7002W 60V 300mA 雙N通道 SOT-323封裝

2N7002W小電流雙N通道MOSFET&#xff0c;電壓60V電流300mA&#xff0c;采用SOT-323封裝形式。超高密度電池設計&#xff0c;適用于極低的ros (on)&#xff0c;具有導通電阻和最大直流電流能力&#xff0c;ESD保護。可應用于筆記本中的電源管理&#xff0c;電池供電系統等產品應…

VUE3+Springboot實現SM2完整步驟

一.VUE3代碼實現 1.安裝依賴 npm install --save sm-crypto 2.導入sm2 const sm2 require(sm-crypto).sm2 3.定義公鑰私鑰 var privateKey "私鑰";//解密使用 var publicKey "公鑰";//加密使用 4.設置加密模式 //cipherMode [加密模式 C1C3C2:1,…