shell腳本函數介紹

1. 函數 (Functions)

定義與優勢

  • 函數是可重復使用的功能模塊

  • 優勢:代碼復用,直接調用解決問題

分類

  • 內置函數:編程語言自帶的函數(如?print

  • 自定義函數:程序員自己編寫的函數

定義語法

# 方式一
function 函數名() {程序段[return int;]
}# 方式二
函數名() {程序段[return int;]
}

調用方式

  • 直接使用函數名調用:函數名

  • 必須先定義后調用

參數傳遞

  • 通過?$n?獲取參數($1?第一個參數,$2?第二個參數,等等)

  • 當 n≥10 時,需使用?${n}?格式

返回值

  • 使用?return?返回數據(只能返回 0-255 的整數)

  • 返回值存儲在?$??中

  • 如果不加 return,將以最后一條命令運行結果作為返回值

2. 數組 (Arrays)

定義方式

# 方式一
數組名=(值1 值2 值3 ... 值N)# 方式二(索引定義)
數組名[索引]=值

讀取數組

${數組名[索引]}    # 讀取單個元素
${數組名[*]}       # 讀取所有元素
${數組名[@]}       # 讀取所有元素
${#數組名[*]}      # 獲取數組長度
${#數組名[@]}      # 獲取數組長度

遍歷數組

# 方式一
for 變量 in ${數組名[*]}
doecho $變量
done# 方式二
for((i=0; i<數組長度; i++))
doecho ${數組名[$i]}
done

3. 加載其他文件變量

語法

. 文件名    # 注意點號和文件名間的空格
source 文件名

案例:查看root用戶的CPU、內存使用情況及顯示主機名和查看時間

優勢

  • 數據源和業務處理分離

  • 代碼復用和擴展性更強

4. 綜合案例:猜數字游戲

游戲規則

  • 程序內置 1-100 之間的隨機數

  • 用戶猜測數字,系統提示"大了"、"小了"或"猜對了"

  • 直到用戶猜對,游戲結束

核心實現

#!/bin/bash
num=$[RANDOM%100+1]  # 生成1-100的隨機數while true
doread -p "請輸入猜測的數字: " caiif [ $cai -eq $num ]; thenecho "恭喜,猜對了"exitelif [ $cai -gt $num ]; thenecho "猜大了"elseecho "猜小了"fi
done

關鍵要點總結

  1. 函數必須定義在調用之前

  2. 函數參數通過 $1, $2... 獲取

  3. 函數返回值通過 return 和 $? 處理

  4. 數組元素用空格分隔,索引從0開始

  5. 使用 source 或 . 加載外部文件變量

  6. RANDOM 變量生成隨機數

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

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

相關文章

DAY 20 奇異值SVD分解-2025.9.1

奇異值SVD分解 知識點回顧&#xff1a; 線性代數概念回顧奇異值推導奇異值的應用 a. 特征降維&#xff1a;對高維數據減小計算量、可視化 b. 數據重構&#xff1a;比如重構信號、重構圖像&#xff08;可以實現有損壓縮&#xff0c;k 越小壓縮率越高&#xff0c;但圖像質量損失…

《C++——定長內存池》

一、為什么需要內存池&#xff1f; 常規的new/delete操作存在兩個主要問題&#xff1a; 性能開銷大&#xff1a;每次new都需要向操作系統申請內存&#xff0c;delete需要歸還給系統&#xff0c;這涉及內核態與用戶態的切換&#xff0c;在高頻次調用時性能損耗明顯。 內存碎片&a…

【跨境電商】上中下游解釋,以寵物行業為例

上中下游概念及其在寵物行業的應用 在產業鏈分析中&#xff0c;“上中下游”指的是一個產品或服務的不同環節&#xff1a;上游涉及原材料供應和基礎資源&#xff0c;中游負責生產加工和制造&#xff0c;下游則包括銷售、分銷和服務。這種劃分有助于理解整個價值鏈的運作。下面&…

飛牛NAS上部署Markdown文稿編輯器,閱讀.md文件同時還可以跨平臺訪問!

前言前段時間小白在使用.md文件的閱讀器&#xff0c;好像是什么*ypor*&#xff0c;但是這個軟件它收費。&#xff08;也不是找不到PJ版本&#xff0c;只是感覺這是人家的知識產權&#xff0c;就不整了。&#xff09;于是小白在尋找能夠代替這個軟件的其他軟件&#xff0c;而且如…

淺談 SQL 窗口函數:ROW_NUMBER() 與聚合函數的妙用

在日常開發中&#xff0c;我們經常會遇到這樣的需求&#xff1a;既要保留明細數據&#xff0c;又要對數據進行排名、累計、分區統計。如果僅依賴傳統的 GROUP BY&#xff0c;往往需要做多次子查詢或者復雜的 JOIN&#xff0c;既繁瑣又低效。 而 窗口函數&#xff08;Window Fun…

DSPFilters實現低通濾波器(QT)

DSPFilters實現低通濾波器DSPFilters實現低通濾波器DSPFilters安裝-構建靜態庫QT代碼復制include和靜態庫到qt項目qt代碼配置效果DSPFilters實現低通濾波器 https://github.com/vinniefalco/DSPFilters DSPFilters安裝-構建靜態庫 用 Qt 自帶的 MinGW&#xff08;最簡單&…

mybatis plus 基本使用和源碼解析

簡介 mybatis-plus是一款mybatis增強工具&#xff0c;用于簡化開發&#xff0c;提高效率。mybatis-plus免去了用戶編寫sql的麻煩&#xff0c;只需要創建好實體類&#xff0c;并創建一個繼承自BaseMapper的接口&#xff0c;mybatis就可以自動生成關于單表的crud。mybatis-plus自…

【Android】Notification 的基本使用

文章目錄【Android】Notification的基本使用權限通知的基本使用1. 獲取通知管理器&#xff08;用于發送、更新、取消通知&#xff09;2. 創建通知渠道&#xff08;Android 8.0 必須&#xff09;3. 使用通知3.1 發送通知3.2 更新通知3.3 取消通知通知的進階技巧通知顯示樣式1. B…

Web前端開發基礎

1.前端概論 1.1 什么是前端&#xff1f; 概念&#xff1a;前端(Front-End)&#xff0c;也稱為客戶端(Client-Side)&#xff0c;指的是用戶在使用網站或Web應用時直接看到并與之交互的部分。它涵蓋了屏幕上的一切內容&#xff0c;從文字、圖片、按鈕、布局到動畫效果 一個簡單的…

并發編程——11 并發容器(Map、List、Set)實戰及其原理分析

1 JUC包下的并發容器Java 基礎集合&#xff08;如 ArrayList、LinkedList、HashMap&#xff09;非線程安全。為了解決線程安全問題&#xff0c;Java 最初提供了同步容器&#xff08;如 Vector、Hashtable、SynchronizedList&#xff09;&#xff0c;但它們通過 synchronized 實…

Circuitjs 測試點的使用

在電路中, 有時候我們想知道, 各個節點上電壓的具體的值. 比如下面這個電路:電流流經兩個電阻器之后, 電壓在下降. 如果想知道具體節點電壓的確切數值, 可以通過添加 測試點(Test Point) 實現. 點擊 繪制–輸出和標簽–添加測試點, 之后在所需測量的節點上拖動添加一個測試點, …

Ansible Playbook 實踐

Ansible Playbook 實踐一、Playbook 基礎規范&#xff08;一&#xff09;YAML 格式要求文件標識&#xff1a;以 --- 開頭&#xff0c;明確為 YAML 文件&#xff0c;結尾可加 ...&#xff08;可選&#xff0c;用于標記文件結束&#xff09;。注釋規則&#xff1a;用 # 實現注釋&…

基于 Vue + Interact.js 實現可拖拽縮放柜子設計器

實現可視化設計工具已成為前端開發的重要挑戰之一。本文將介紹如何使用 Vue.js 配合 Interact.js 庫創建一個功能完整的櫥柜設計器&#xff0c;兼容PC和移動終端。核心功能網格系統&#xff1a;基于 CSS 網格實現精準定位拖拽功能&#xff1a;實現單元格的自由移動縮放控制&…

今日科技速遞 | 智能芯片突圍、AI+行動深化、服貿會科技成果亮相

今日科技速遞 | 智能芯片突圍、AI行動深化、服貿會科技成果亮相 一、樂鑫科技漲停&#xff1a;Wi-Fi 6/7 與 AIoT 芯片雙路徑創新驅動 新聞回顧 2025 年 8 月 27 日&#xff0c;科創板公司 樂鑫科技&#xff08;688018&#xff09; 盤中一度漲停&#xff0c;股價達到 225 元&am…

PDF壓縮如何平衡質量與體積?

在日常工作或者生活中&#xff0c;我們常常要處理PDF文檔&#xff0c;很多人可能會遇到這樣的困擾&#xff1f;使用WPS處理PDF時&#xff0c;部分功能需要付費&#xff0c;這給我們帶來了許多不便。 它的使用方式十分簡單&#xff0c;你只要雙擊圖標&#xff0c;它就能啟動&am…

Flask 之上下文詳解:從原理到實戰

一、引言&#xff1a;為什么 Flask 需要“上下文”&#xff1f;在 Web 開發中&#xff0c;我們經常需要訪問當前請求的信息&#xff08;如 URL、表單數據&#xff09;、當前應用實例&#xff08;如配置、數據庫連接&#xff09;或用戶會話狀態。傳統做法是使用全局變量&#xf…

深入探索Vue:前端開發的強大框架

在當今的前端開發領域&#xff0c;Vue作為一款備受矚目的JavaScript框架&#xff0c;以其簡潔易用、高效靈活等特性&#xff0c;贏得了眾多開發者的青睞。無論是構建小型的交互頁面&#xff0c;還是開發大型的單頁應用&#xff0c;Vue都能展現出卓越的性能和出色的表現。本文將…

B樹與B+樹的原理區別應用

在磁盤存儲和內存有序的數據管理中&#xff0c;B 樹與 B 樹是核心的數據結構&#xff0c;二者均通過 “多路平衡” 特性減少 IO 次數&#xff0c;但在數據存儲方式、查詢邏輯上存在本質差異。一、B 樹&#xff08;Balance Tree&#xff09;&#xff1a;多路平衡搜索樹B 樹是 “…

從零到一:使用anisble自動化搭建kubernetes集群

在我們云原生俱樂部的暑期學習中&#xff0c;我們了解并學習了需要關于云原生的技術&#xff0c;其中在應用層面上最重要的就是shell編程和ansible&#xff0c;而想要掌握這兩項技術離不開的就是實踐&#xff0c;而kubernetes是我們云原生技術棧的核心技術&#xff0c;在生產實…

【LangGraph】langgraph.prebuilt.create_react_agent() 函數:快速創建基于 ReAct(Reasoning + Acting)架構的智能代理

本文是對 langgraph.prebuilt.create_react_agent 函數的詳細且全面的介紹&#xff0c;涵蓋其定義、功能、設計理念、參數、返回值、使用場景、實現原理、示例代碼、高級用法、注意事項、與其他方法的對比&#xff0c;以及學習建議。 1. 概述 langgraph.prebuilt.create_react…