Shell編程中的循環語句和函數

一、for循環語句

? ? ? ? 當面對各種列表重復任務時,使用簡單的if語句已經難以滿足需求,這時就需要for循環語句。for語句的結構為:

for 變量 in 取值列表

do

? ? ? ? 命令序列

done

使用for循環語句時,需要指定一個變量及取值列表,針對不同的取值重復執行相同的命令序列,直到列表中的變量用完之后,退出循環。

? ? ? ? for循環的執行流程為:
?

? ? ? ? ?for循環的應用實例:根據IP地址檢查主機狀態。

?得出結果為:

二、使用while循環語句

? ? ? ? for循環語句適用于列表對象無規律,且列表來源已固定的場合。而對于按照特定條件執行重復操作的情況,則while更適合。

? ? ? ? 在腳本應用中,while可以根據特定的條件反復執行一個命令序列,直到該條件不再滿足為止。使用while時也應該注意,不要出現死循環的情況,死循環會導致while中的命令序列會一直重復執行,后邊的命令操作將無法執行,因此,應在while內部寫入修改測試條件的語句,以便在適當的時候跳出循環。

? ? ? ? while的語法結構:

while 條件測試操作

do

? ? ? ? 命令序列

done

? ? ? ? while執行的流程為:

? ? ? ? while循環實例:猜價格游戲

????????

三、until循環語句

????????until循環與while循環類似,while循環能實現的腳本unti同樣也可以實現,但區別是while循環在條件為真是繼續執行循環,而unti則是在條件為假時執行循環。until的語法結構和while相似,流程也一樣唯一不同的while是條件為真時才會循環,until是條件為假時才會循環。

? ? ? ? until循環實例:計算1~50的和

????????

四、shell函數

? ? ? ? Shell函數可用于存放一系列的指令。在Shell腳本執行過程中,函數被之于內存中,每次調用函數時不需要從內存讀取,因此運行的速度比較快。通過編寫、使用函數,可以提高程序可讀性與重用性,避免編寫大量重復代碼。

? ? ? ? Shell函數定義的方法如下:

[function] 函數名() {

? ? ? ? 命令序列

? ? ? ? [return x]

}

  • “function”關鍵字表示定義一個函數,可以省略;
  • {"符號表示函數執行命令的入口,該符號可以與函數名同行也可以在函數名下一行的句首;
  • }”符號表示函數體結束,兩個大括號之間{}是函數體;
  • “命令序列”部分可以是任意的 Shel 命令,也可以調用其他函數;
  • “return”表示退出函數返回一個退出值,通過返回值判斷執行是否成功,也可以使用 exit 終止整個 Shell 腳本。

? ? ? ? Shell函數的調用的方法為:函數名 [參數1] [參數2]...。

4.2 函數變量的作用范圍

? ? ? ? 函數變量的作用范圍分為:

  • 局部:局部變量只在函數內部有效,在函數外部不能調用。通常在函數名前加一個"local"關鍵字來聲明局部變量,且只能在聲明的函數內部使用。
  • 全局:在整個腳本中都能夠使用,注意聲明時不要與局部變量沖突。

4.3?函數的參數

? ? ? ? 函數參數的用法如下:

函數名稱? 參數1 參數2 參數3......

在使用函數內部使用函數參數時,要使用"$n"這中形似使用,n是第n個參數。而從第10個參數開始,調用時要用"${n}"的方式。

4.4 遞歸函數

? ? ? ? 遞歸函數就是指函數自己調用自己。例如:

myFunction() {

? ? ? ? if [ $1 -gt?0 ]

? ? ? ? then

? ? ? ? ? ? ? ? local num=$1

? ? ? ? ? ? ? ? let "num=$num-1"

? ? ? ? ? ? ? ? myFunction $num #這里遞歸地調用了自己

? ? ? ? fi

}

myFunction 5

五、 Shell數組

????????在Shell腳本中,數組是一種常見的數據結構,主要的應用場景包括:獲取數組長度、獲取元素長度、遍歷元素、元素切片、元素替換、元素刪除等等。Shell 中的數組與Java、C、Python不同,只有一維數組,沒有二維數組。數組元素的大小與限制,也不需要事先定義。Shell 數組用括號()來表示,元素用空格分隔,元素的下標與大部分編程語言類似從0開始。

? ? ? ? 數組常用定義方法包括以下幾種:

  1. 數組名=(value0 value1 value2......)
  2. 數組名=([0]=value [1]=value [2]=value......)
  3. 列表名=“value0 value1 value2......”? ? ? ? ? ?數組名=($列表名)
  4. 數組名[0]=“value”

? ? ? ? 數組名[1]=“value”

? ? ? ? 數組名[2]=“value”...

? ? ? ? 下面通過具體的示例了解數組的基本使用方法:

? ? ? ? 1. 獲取數組長度

arr_number=(1 2 3 4 5)

arr_length=$(#arr_number[*])

echo $arr_number

5 #輸出5

? ? ? ? 2. 讀取某下表賦值

arr_index2=${arr_number[2]}? #第三個元素

echo $arr_index2

2 #輸出2

? ? ? ? 3. 數組遍歷

? ? ? ? 4. 數組切片

arr=(1 2 3 4 5)

echo ${arr[@]} #輸出整個數組

1 2 3 4 5 #輸出

echo ${arr[@]:0:2}? #${數組名[@或*]:起始位置:長度}

1 2 #輸出

echo ${arr[@]:2:3}

3 4 5

? ? ? ? 5. 數組替換

arr=(1 2 3 4 5)

echo ${arr[@]/4/66}? #${數組名[@或*]/查找字符/替換字符}

1 2 3 66 5

echo ${arr[@]}? #并不會替換數組原有內容

arr=(${arr[@]/4/66})? #要實現改變原有數組,開通過重新賦值來實現

echo ${arr[@]}

1 2 3 66 5

? ? ? ? 6. 數組刪除

arr=(1 2 3 4 5)

unset arr? #刪除數組

echo ${arr[*]}

arr=(1 2 3 4 5)

unset arr[2]? ?#刪除第三個元素

echo ${arr[*]}

1 2 4 5

六、腳本調試

????????為避免編寫的腳本出錯,除了在編寫腳本時注意書寫規范,排除語法錯誤,更重要的是利用調試腳本工具來調試腳本。echo命令是最有用的調試腳本工具之一,一般在可能出現問題的腳本中加入echo命令,采用的是分段排查的方式。除了echo命令之外,bash Shell也有相應參數可以調試腳本。使用bash命令參數調試,命令的語法為:

sh [-nvx] 腳本名

其中參數的含義為:

  • -n:不會執行該腳本,僅查詢腳本語法是否有問題,如果沒有語法問題就不顯示任何內容,如果有問題會提示報錯。
  • -v:在執行腳本時,先將腳本的內容輸出到屏幕上然后執行腳本,如果有錯誤,也給出錯誤提示。
  • -x:將執行的腳本內容輸出到屏幕上,這個是對調試很有用的參數。

當腳本過長時,可以通過"set"命令,只調試部分腳本。通過在要調試腳本的上一行寫上"set -x",在腳本末行的下一行寫上"set -x"即可調試中間的腳本。

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

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

相關文章

2、python環境的安裝-mac系統下

打開官網,downloads下邊有macOS,點擊: 選擇最新版本,點擊,進入下邊的頁面,一直往下滑,看到files中有個macOS的版本,點擊下載 點擊下載后是pkg的安裝包,點擊安裝。 一步步…

鴻蒙OS開發:【一次開發,多端部署】(app市場首頁)項目

一多應用市場首頁 介紹 本示例展示了應用市場首頁,頁面中包括Tab欄、運營橫幅、精品應用、精品游戲等。 本示例使用一次開發多端部署中介紹的自適應布局能力和響應式布局能力進行多設備(或多窗口尺寸)適配,保證應用在不同設備或…

藍橋杯第1022題 玩具蛇 基礎DFS C++ Java

題目 思路和解題方法 問題理解:此題要求找出將一條由16節正方形構成的玩具蛇放入4x4的方格中的不同方式數。每節蛇可以是直線或直角轉彎,且蛇的形狀需要完全覆蓋盒子里的16個格子,每個格子僅被蛇的一個部分占據。 狀態表示:使用一…

爺爺看了都會,打工人必備的摸魚AI神器!免費!

去年,AI技術無疑成為了最為引人注目的焦點,層出不窮的創新應用令人目不暇接。盡管許多人對這股AI熱潮的持久性持懷疑態度,但現實卻用事實給予了最有力的反駁。AI所展現出的強大生產力,足以令人刮目相看。 而今年以來,…

springboot鏈接kafka異步發送消息

<dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency> spring:kafka:bootstrap-servers:- ip:端口producer:retries: 0acks: 1batch-size: 16384properties:linger:ms: 100buff…

centos 記錄用戶登陸ip和執行命令

centos 記錄用戶登陸ip和執行命令 在/etc/profile 文件末尾添加如下代碼&#xff1a; #!/bin/bash USER_IPwho -u am i 2>/dev/null | awk {print $NF} | sed -e s/[()]//g HISTDIR/usr/share/.history if [ -z "$USER_IP" ]; then USER_IPhostname fi…

VUE3學習第一篇:啟動ruoyi

1、找到ruoyi的vue3版本 然后下載代碼到本地&#xff0c; 我剛開始用的nodejs14報錯&#xff0c; 后面換成nodejs16&#xff0c;啟動前端成功了。 頁面如下圖所示

go panic

panic 能夠改變程序的控制流&#xff0c;調用 panic 后會立刻停止執行當前函數的剩余代碼&#xff0c;并在當前 goroutine 中遞歸執行調用方的 defer。 // A _panic holds information about an active panic. // // A _panic value must only ever live on the stack. // // …

【JPCS出版,EI穩定檢索會議推薦】第四屆計算機、遙感與航空航天國際學術會議(CRSA 2024)已成功申請JPCS出版,火熱征稿中!

【EI核心、Scopus】第四屆計算機、遙感與航空航天國際學術會議&#xff08;CRSA 2024&#xff09;將于2024年7月5-7日在日本大阪舉行。計算機、遙感與航空航天國際學術會議為來自世界各地的研究學者、工程師、學會會員以及相關領域的專家們提供一個關于“計算機科學”、“遙感技…

體驗SmartEDA的高效與便捷,電子設計從未如此簡單

SmartEDA&#xff1a;革新電子設計&#xff0c;讓高效與便捷觸手可及 在快節奏的現代生活中&#xff0c;科技日新月異&#xff0c;各行各業都在尋求更高效、更便捷的解決方案。對于電子設計行業而言&#xff0c;SmartEDA的出現&#xff0c;無疑是一場革命性的變革。它以其高效…

【PG16】后 EL 7 時代,PG 16 如何在 CentOS 7 上運行

↑ 關注“少安事務所”公眾號&#xff0c;歡迎?收藏&#xff0c;不錯過精彩內容~ ★ 本文寫于 2023-09-29 PostgreSQL 16 Released 9/14, PostgreSQL 16 正式發布。從發布公告^1 和 Release Notes^2 可以看到 PG16 包含了諸多新特性和增強改進。 性能提升&#xff0c;查詢計劃…

快速核對兩個表格數據

快速核對兩個表格數據的方法取決于數據的規模、復雜性以及你使用的工具。以下是一些常見的方法&#xff1a; 使用Excel或其他電子表格軟件: VLOOKUP 或 HLOOKUP 函數&#xff1a;這些函數可以在一個表格中查找與另一個表格匹配的值&#xff0c;并返回對應的結果。條件格式&…

Genzai:一款針對物聯網安全的多功能實用性工具套件

關于Genzai Genzai是一款針對物聯網安全的多功能實用性工具套件&#xff0c;該工具旨在識別與物聯網相關的儀表盤&#xff0c;并掃描它們以查找默認密碼和安全問題&#xff0c;廣大研究人員可以使用該工具來檢測和提升物聯網設備的安全性。 Genzai支持用戶以輸入的形式提供一個…

npm install安裝時卡死時嘗試切換npm鏡像地址

當使用npm時&#xff0c;為了提高下載速度和穩定性&#xff0c;特別是針對國內的開發者&#xff0c;經常需要配置國內的鏡像源&#xff0c;如淘寶npm鏡像。以下是如何添加淘寶源等鏡像內容的詳細步驟和說明&#xff1a; 1. 淘寶npm鏡像地址 淘寶npm鏡像的地址在2022年6月30日…

簡愛的思維導圖怎么做?從這三個角度

簡愛的思維導圖怎么做&#xff1f;《簡愛》作為夏洛蒂勃朗特的代表作&#xff0c;不僅是一部經典的愛情小說&#xff0c;也是探索女性獨立與自我成長的文學巨著。為了深入理解這部作品&#xff0c;制作思維導圖是一種高效的學習和分析工具。以下是三種不同的角度來創建《簡愛》…

探討開源與閉源大模型在AI領域的發展前景與挑戰

一、引言 隨著人工智能&#xff08;AI&#xff09;技術的飛速發展&#xff0c;大模型已成為推動AI技術進步的核心動力。在AI大模型的發展過程中&#xff0c;開源與閉源兩種不同的發展路徑各自展現出了獨特的發展前景與挑戰。本文將深入探討這兩種路徑在AI領域的發展前景&#…

在馬達驅動上的MOS產品選型分析與應用

電機的應用非常廣泛&#xff0c;可以說大部分動的產品內部都有電機的身影&#xff0c;其主要的應用領域有風機、泵、散熱風扇、電動工具、智能家居、以及汽車應用等等。隨著各國出臺了更加嚴格的用電標準&#xff0c;節能電機成為了市場關注的熱點&#xff0c;而BLDC電機具有高…

K8S集群中Yaml文件詳解

目錄 一、Yaml概述 二、Yaml基本語法 三、Yaml數據結構 四、K8S資源清單描述方法 五、api資源版本標簽 六、Yaml文件示例詳解 1.deployment.yaml文件詳解 2.Pod yaml文件詳解 3.Service yaml文件詳解 七、Yaml文件相關操作 1.試運行 2.生成yaml格式 3.生成json格式…

手搓順序表(C語言)

目錄 SeqList.h SeqList.c 頭插尾插復用任意位置插入 頭刪尾刪復用任意位置刪除 SLtest.c 測試示例 順序表優劣分析 SeqList.h //SeqList.h#pragma once#include <stdio.h> #include <assert.h> #include <stdlib.h> #define IN_CY 3typedef int S…

深入分析C#中的“編寫器”概念——代碼修改、注解與重構

文章目錄 1. 編寫器&#xff08;Writer&#xff09;的概念2. 編寫器的作用和工作原理3. 編寫器的重要性4. 寫入器常用方法5. 寫入器示例6. 編寫器示例——使用Fody進行代碼注解和重構7. 總結 在軟件開發過程中&#xff0c;代碼的維護和更新是至關重要的。C#作為一種流行的編程語…