Linux shell 腳本基礎 003

目錄

Linux shell 腳本語句

1. for 循環流程控制

1.1 基本語法格式

1.2 常見用法示例

1.3生產案例示例

2. while 循環

2.1 基本語法格式

2.2 常見用法示例

3. case 語句

3.1 基本語法格式

3.2 常見用法示例

3.3生產案例示例

4. shell 函數

4.1 函數的定義

4.2 函數的調用

4.3 函數的參數

4.4 函數的返回值

5. 數組

5.1 數組的定義

5.2 數組的訪問

5.3?數組元素的修改與刪除


Linux shell 腳本語句

1. for 循環流程控制

for 循環是 shell 腳本中用于重復執行一系列命令的流程控制結構,適合對列表中的每個元素執行相同或相似的操作。

1.1 基本語法格式

for 變量名 in 列表

do

????循環體命令

done

其中,“變量名” 會依次取 “列表” 中的每個值,每次取值后執行 “循環體命令”,直到列表中的元素全部處理完畢。

還有第2種寫法

for ((初始值; 限制值; 執行步長))

do

? ? ? ? 程序段

done

解釋:

初始值:即循環初始值。例如:i=1

限制值:即循環條件。例如:i<=5

執行步長:即循環初始值修改。例如:i++

1.2 常見用法示例

  • 遍歷固定列表:列表為明確的多個值,用空格分隔。

比如,遍歷水果列表并輸出

執行后會依次輸出 “我喜歡的水果:apple”“我喜歡的水果:banana”“我喜歡的水果:orange”。

遍歷文件列表:列表為某個目錄下的文件

比如我要找當前目錄下的文本文件

若當前目錄有 11.txt、ip.txt,會輸出對應的文件名。

遍歷數字范圍:使用 “{起始值.. 結束值}” 表示數字范圍。

比如輸出1到5的數字

就會分別輸出數字1到5

1.3生產案例示例

比如,我要統計 /var/log 有多少個文件,并且顯示這些文件名,輸入以下命令

這邊分別解釋一下這些

1. sum=0??

?作用:初始化變量 sum 為 0,用于后續統計文件數量。

2. for i in $(ls -r *); do??

ls:列出目錄內容。

-r:逆序排序(從 Z 到 A)。

*:匹配所有文件和目錄(不包括隱藏文件)。

3.if [ -f "$i" ]; then??

??-f "$i"檢查 $i 是否是普通文件(不是目錄、鏈接等)。

??注意:變量 $i 必須用雙引號包裹("$i"),避免文件名含空格時出錯。

?4. let sum++??

??作用計數器 sum 加 1。

然后運行

2. while 循環

while 循環也是一種循環結構,它根據條件判斷結果來決定是否重復執行循環體,只要條件為真,就會一直執行,直到條件為假時停止。

2.1 基本語法格式

while 條件判斷

do

????循環體命令

done

每次執行循環前都會先判斷 “條件判斷” 的結果,若結果為真(返回 0),則執行 “循環體命令”;若為假(返回非 0),則退出循環。

2.2 常見用法示例

  • 基本條件循環:通過條件控制循環次數。比如從1數到5

執行后會依次輸出 1 到 5 的計數。

  • 無限循環:在語句在滿足特定條件時退出無限循環。

其中 exit 0 為退出循環,當我只要輸入的字符不是yes 則不會退出循環

3. case 語句

case 語句用于多分支條件判斷,它將一個變量與多個模式進行匹配,當匹配到某個模式時,執行對應的命令塊,適合處理多種固定的選擇場景。

3.1 基本語法格式

case 變量 in

????模式1)

????????命令塊1

????????;;

????模式2)

????????命令塊2

????????;;

????模式n)

????????命令塊n

????????;;

????*)

????????默認命令塊 ?# 當變量與所有模式都不匹配時執行

????????;;

esac

“變量” 會依次與每個 “模式” 進行比較,匹配成功則執行對應的 “命令塊”,每個命令塊以 “;;” 結束;“*” 表示默認模式,匹配所有未被前面模式匹配的情況。

3.2 常見用法示例

  • 簡單菜單選擇:根據用戶輸入的選項執行不同操作。比如查看當前目錄,今天的日期

當用戶輸入 1 時,執行 ls -l 查看目錄;輸入 2 時,執行 date 查看時間;輸入 3 時退出;輸入其他內容時提示無效選項。

3.3生產案例示例

比如我要用case查看系統硬件的負載情況的信息(cpu,內存,磁盤)

保存以后分別運行,比如我輸入1,就可以查看cpu的負載情況

我輸入2,就可以查看內存的負載情況

輸入1,2,3,4以外的數字就會提示

4. shell 函數

shell 函數是將一系列命令組合在一起并賦予名稱的代碼塊,它可以實現代碼的復用,讓腳本結構更清晰,便于維護和修改。

4.1 函數的定義

shell 函數有兩種常見的定義方式:

方式一:

函數名() {

????函數體(一系列命令)

}

方式二:

function 函數名 {

????函數體(一系列命令)

}

其中,函數名遵循 shell 變量的命名規則,由字母、數字和下劃線組成,不能以數字開頭。函數體包含實現特定功能的命令序列。

4.2 函數的調用

定義好函數后,直接使用函數名即可調用該函數,無需加括號。

示例:定義一個輸出歡迎信息的函數

執行腳本后,會輸出 “歡迎使用本腳本!”。

4.3 函數的參數

函數可以接收參數,在函數內部通過$1$2…… 來獲取參數,$0表示函數名本身,$#表示參數的個數。

示例:定義一個計算兩數之和的函數

?

執行后輸出 “3 + 5 = 8”。

4.4 函數的返回值

函數可以通過return語句返回一個整數(0-255)。也可以通過 echo 輸出結果,在調用時用變量接收。

示例:有返回值的函數

5. 數組

數組是 shell 中用于存儲多個值的變量類型,它可以存儲不同類型的數據,方便對一組相關數據進行管理和操作。

5.1 數組的定義

在 shell 中,數組的定義方式較為靈活,常見的有以下幾種:

  • 方式一:直接定義數組元素

數組名=(元素1 元素2 元素3 ...)

示例:

fruits=("apple" "banana" "orange" "grape")

  • 方式二:單獨為數組元素賦值

數組名[索引]=元素

示例:

numbers[0]=10

numbers[1]=20

numbers[2]=30

?

其中,數組的索引從 0 開始。

5.2 數組的訪問

訪問數組元素時,使用${數組名[索引]}的格式,若要訪問數組中的所有元素,使用${數組名[@]}${數組名[*]}

示例:

5.3?數組的遍歷

可以使用 for 循環遍歷數組中的所有元素。

示例:

執行后依次輸出數組中的每個元素。

5.3?數組元素的修改與刪除

  • 修改數組元素:直接為指定索引的元素重新賦值

fruits[1]="watermelon"

echo "修改后的第二個水果:${fruits[1]}"

  • 刪除數組元素:使用unset命令

unset fruits[2]

echo "刪除第三個元素后的水果:${fruits[@]}"

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

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

相關文章

7.1elementplus的表單

Element Plus 表單由以下幾個關鍵部分構成&#xff1a;<el-form>: 表單容器。它是整個表單的根組件&#xff0c;負責管理表單數據、校驗規則、布局方式等。<el-form-item>: 表單項容器。用于包裹一個具體的表單控件&#xff08;如輸入框、選擇器等&#xff09;及其…

TF-IDF:文本分析的“火眼金睛”

TF-IDF&#xff1a;文本分析的“火眼金睛” 在信息爆炸的時代&#xff0c;我們每天都會接觸到海量的文本數據。如何從這些數據中快速找出最重要的信息&#xff1f;TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09;算法就是一種非常實用的工具&#xf…

傳統星型拓撲結構的5G,WiFi無線通信網絡與替代拓撲結構自組網

一、個人理解 區別自組網&#xff0c;5G和WiFi三者要抓住兩個關鍵點&#xff1a;移動、組網。 5G通信是移動通信的最新一代&#xff1b;1940年代美軍的手持對講機雖然可以移動&#xff0c;但是算不上網絡&#xff0c;后面的第一代移動通信蜂窩網絡才能算上網絡。 WiFi通信雖…

REST API 是無狀態的嗎,如何保障 API 的安全調用?

當然&#xff0c;這是一個非常核心的API設計和安全領域的問題。我們來詳細拆解一下。1. REST API 是無狀態的嗎&#xff1f;?是的&#xff0c;REST API 的核心原則之一就是“無狀態”&#xff08;Statelessness&#xff09;。??這意味著&#xff1a;?服務器不保存客戶端的會…

Machine Learning HW3 report:圖像分類(Hongyi Lee)

任務&#xff1a;使用CNN把食物圖片分為11類&#xff08;不能使用預訓練的模型&#xff09;。此任務很耗時&#xff0c;一次訓練至少1h&#xff0c;所以要利用好Kaggle notebook中Save Version功能&#xff0c;并行訓練節省時間。 基準 Simple : 0.50099Medium : 0.73207 Train…

Element整體操作樣式

Element: 給表格整體設置斑馬紋 在main.js中 ElementUI.Table.props.stripe {type: Boolean,default: true }在element-ui.scss中 // // 為所有 el-table 設置默認斑馬紋 // .el-table { // &.el-table--enable-row-hover .el-table__body tr:hover > td { // ba…

谷歌官宣組建“網絡攻擊部門”,美國網絡安全戰略轉向“以攻代防”

谷歌宣布將組建網絡攻擊部門8月27日&#xff0c;谷歌宣布將組建網絡攻擊部門&#xff08;disruption unit&#xff09;。谷歌威脅情報集團副總裁Sandra Joyce在本周二的網絡安全政策會議上表示&#xff0c;谷歌正在尋找“合法且符合道德規范的干擾方案”&#xff0c;通過情報主…

Rust Tokio異步任務實戰教程(高級功能)

1. 強大的異步 I/O 多路復用Tokio 的核心競爭力之一是對操作系統原生異步 I/O 機制的封裝&#xff08;如 Linux 的 epoll、Windows 的 IOCP、macOS 的 kqueue&#xff09;&#xff0c;這是異步非阻塞的底層基石。作用&#xff1a;允許單線程同時監聽成百上千個 I/O 事件&#x…

8.1【Q】VMware相關

在圖四中&#xff0c;Interface Layer是用來干什么的&#xff1f;IOBus是什么我正在使用VMware虛擬機&#xff0c;但是沒有網絡&#xff08;宿主機有網&#xff09;&#xff0c;我該如何配置網絡&#xff1f;網絡連接模式??&#xff1a;??NAT模式??&#xff08;推薦&…

從卡頓到絲滑:大型前端項目 CSS 優化全攻略

摘要 頁面樣式變重是大前端項目常見的后遺癥&#xff1a;CSS 體積越來越大、首屏卡、切頁抖、首包飆。核心問題其實就三件事&#xff1a;把首屏必須的樣式盡快給到瀏覽器、把非首屏的樣式晚點再說、把多余的樣式堅決清理掉。本文用可運行的 Demo 和工程化流程&#xff0c;帶你…

CSS基礎學習第二天

1.emmet語法1&#xff09;快速生成HTML結構語法---標簽名tab鍵即可生成標簽---標簽*數量即可生成多個標簽---如果有父子級關系的標簽&#xff0c;用>&#xff0c;比如ul>litab鍵---如果有兄弟級的標簽&#xff0c;用tab鍵---如果生成帶有類名或者id名字的&#xff0c;直接…

【自記】 Python 中函數參數前加 *(單星號)的解包可迭代對象寫法說明

在 Python 中&#xff0c;函數參數前加 *&#xff08;單星號&#xff09;是一種解包可迭代對象的寫法&#xff0c;用于將可迭代對象&#xff08;如元組、列表等&#xff09;中的元素逐個傳遞給函數的參數。具體說明當有一個可迭代對象&#xff08;比如元組 temp (1, 2, 3)&…

C語言————深入理解指針1(通俗易懂)

C語言越學到后面&#xff0c;越會感到恐慌&#xff0c;聽到指針、結構體等等這些&#xff0c;想必很多人不自覺的就會感覺很難&#xff0c;就想打退堂鼓了。哈哈哈哈&#xff0c;被小博猜到了吧&#xff01;&#xff01;悄悄告訴你們&#xff0c;小博剛開始學習的時候也是。但是…

香港電訊為知名投資公司搭建高效、安全IT管理服務體系

客戶背景 客戶為一家世界知名的能源投資公司在中國設立的子公司&#xff0c;在中國擁有涵蓋煤炭開采、火力發電、新能源以及能源貿易等貫穿整個能源供應鏈的業務體系&#xff0c;投資共計2個煤礦、4個電廠&#xff0c;以及7個光伏電站。 客戶需求 客戶希望通過位于北京的總部…

緊急安全通告:多款 OpenSSH 與 glibc 高危漏洞曝光,CVE-2023-38408 等須立即修復

概述&#xff1a;OpenSSH&#xff08;OpenBSD Secure Shell&#xff09;是加拿大OpenBSD計劃組的一套用于安全訪問遠程計算機的連接工具。該工具是SSH協議的開源實現&#xff0c;支持對所有的傳輸進行加密&#xff0c;可有效阻止竊聽、連接劫持以及其他網絡級的攻擊。 OpenSSH …

隨時隨地開發:通過 FRP 搭建從 Ubuntu 到 Windows 的遠程 Android 調試環境

你是否曾夢想過這樣的工作流:在咖啡館里,你只帶著一臺輕薄的 Surface Pro,而代碼的編譯、運行和調試,全部交由家里那臺性能強勁的 Ubuntu 臺式機來完成?更酷的是,你甚至想將手機直接插在 Surface 上,讓遠端的 Ubuntu 無縫識別并進行開發。 今天,我們就將這個夢想變為現…

異步編程與面向對象知識總結

文章目錄原型鏈關鍵字總結原型對象:prototype對象原型:__ proto__面向對象編程封裝抽象多態總結異步編程基礎循環宏任務嵌套微任務原型鏈關鍵字總結 原型對象:prototype 函數的屬性,指向一個對象&#xff0c;這個對象是通過該函數作為構造函數創建的所有實例的原型 修改原型會…

Spring Boot + KingbaseES 連接池實戰

文章目錄一、前言二、什么是數據庫連接池&#xff1f;三、SpringBoot KingbaseES 環境準備3.1 加依賴&#xff08;pom.xml&#xff09;3.2 基礎連接信息&#xff08;application.yml&#xff09;四、四類主流連接池實戰4.1 DBCP&#xff08;遷移型 / 傳統項目友好&#xff09;…

矩陣待辦ios app Tech Support

Getting Support: mail: 863299715qq.com

React中優雅管理CSS變量的最佳實踐

在現代前端開發中&#xff0c;CSS變量&#xff08;也稱為CSS自定義屬性&#xff09;已成為管理樣式系統的重要工具。它們提供了強大的動態樣式能力&#xff0c;但在JavaScript中高效地訪問和使用這些變量卻存在一些挑戰。本文將介紹一個優化的解決方案&#xff0c;幫助你在Reac…