[Linux] shell腳本的函數和數組

一、函數

1.1 函數的定義

函數是腳本的別名

作用:函數可以避免代碼重復,可讀性強,可以簡化腳本。

格式:函數名(){腳本}

1.2? 如何使用函數

1.定義

2.調用

函數一定要先定義再使用

例子:

錯誤示例

正確示例?

1.3 函數文件

專門存放函數的文件
要使用的時候
. 或者絕對路徑的文件名 放在腳本的最前面?

?1.4?函數變量的作用范圍

用法:加local 關鍵字(加locao只會在函數內部生效,不影響外界環境)

?1.5?函數的返回值

return表示退出函數并返回一個退出值,腳本中可以用$?變量表示該值

使用原則:

  1. 函數一結束就去返回值,應為$?變量只返回執行的最后一條命令的退出返回碼

  2. 退出碼必須是0-255,超出的值將為除以256取余

?

例子

?

?1.6?函數的傳遞參數

1.7 函數的遞歸

實際應用就是階乘

實驗:

#!/bin/bash
fact () {
if [ $1 -eq 1 ]
then
echo 1
else
echo $[ $1 * `fact $[$1-1]` ] //如果輸入的數不是1那么就用這個數乘以他本身減去一,如此循環,直到1
fi}
fact $1

?二、數組

2.1 數組的類別

數組分為普通數組和關聯數組

普通數組:下標是數字關聯數組:下標是與含義的字符串

declare -a 數組名
#普通數組可以不事先聲明,直接使用
declare -A 數組名?
#關聯數組必須先聲明,再使用

2.2 聲明數組

1.數組名=(數組值,中間用空格隔開)

2.數組名[下表1]=數值1

例子:

普通數組

關聯數組

?2.3 刪除數組

普通數組

關聯數組

?2.4 數組切片

格式
${數組名[@]:跳過個數:要取個數}

?2.5 進階:冒泡排序

提出問題:假如我有一個隨機數的數組我想讓他從小到大排列,該怎么做

#!/bin/bash
for i in {0..9}
do
a[$i]=$RANDOM
done
echo "原始數組為: ${a[*]}"
#隨機生成一個數組
l=${#a[*]}
#定義l的長度為數組a 10
for ((i=1;i<$l;i++))
#比較的輪數
dofor ((j=0;j<$l-$i;j++))
#兩個相鄰的數需要比較的輪數dofirst=${a[$j]}
#數組的第一個數k=$[$j+1]
#計算下一個數的角標second=${a[$k]}
#數組的第二個數if [ $first -gt $second ]thentemp=$firsta[$j]=$seconda[$k]=$tempfidone
done
echo "排序后的數組為: ${a[@]}"

總結:

1. 注意在函數內傳遞參數與通過位置變量在函數外傳遞參數的區別(函數傳遞由腳本變量的位置決定)。

2. 注意函數中局部變量和全局變量的區別。

3.在接收位置變量的值時,建議給出一個新定義的變量,以增加代碼的可讀性。

4.對遞歸函數的理解是對函數的深入運用和挖掘,尤其是遞歸方面的運用。

5.注意需要保持函數的腳本形式也可以在文件中構建函數庫,另外調用文件的第一條語句要調用源代碼或". "。

6. 如何構建數組(我們可以將其視為包含多個獨立元素的變量集合)。

?

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

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

相關文章

編譯原理Lab1-用FLEX構造C-Minus-f詞法分析器

HNU編譯原理lab1實驗–根據cminux-f的詞法補全lexical_analyer.l文件&#xff0c;完成詞法分析器。 本文沒有添加任何圖片&#xff0c;但是以復制輸出的形式展現出來了實驗結果。 實驗要求&#xff1a; 根據cminux-f的此法補全lexical_analyer.l文件&#xff0c;完成詞法分析…

國家超級計算濟南中心低代碼平臺應用實踐

摘要&#xff1a;文章主要介紹了濟南超算使用低代碼平臺明道云解決了一系列業務問題&#xff0c;包括資產管理、人員與機構管理、流程制度管理等。通過明道云平臺&#xff0c;濟南超算成功地將不同部門的業務信息進行整合&#xff0c;提高了工作效率和管理水平。文章還強調了明…

計算機端口

前言 計算機端口&#xff08;Port&#xff09;是一種用于在計算機網絡中標識特定服務或應用程序的機制。 端口是一個數字&#xff0c;范圍從0到65535&#xff0c;用于將網絡通信分配給不同的應用程序或服務。 在 Internet 協議套件&#xff08;TCP/IP&#xff09;中&#xff0…

MG-HSF

作者未提供代碼

Go語言中結構體的使用和示例

結構體&#xff08;簡稱struct&#xff09;用于創建不同數據類型的成員集合&#xff0c;放入一個單一的變量中。雖然數組用于將相同數據類型的多個值存儲在單一變量中&#xff0c;但結構體用于將不同數據類型的多個值存儲在單一變量中。結構體對于將數據組合在一起以創建記錄非…

openGL之紋理 :第二課

#include "glew.h" #include "glfw3.h" #include "SOIL2.h"//如何解析輸入的數據流 0&#xff0c;1,2 分三部分 GLchar * vertextSrc " #version 330 core \n \layout (location 0) in vec3 position; \layout (location 1) in vec3 col…

【精選】??通道熱點加持的LW-ResNet:小麥病害智能診斷與防治系統

1.研究背景與意義 小麥是世界上最重要的糧食作物之一&#xff0c;但由于病害的侵襲&#xff0c;小麥產量和質量受到了嚴重的威脅。因此&#xff0c;開發一種高效準確的小麥病害識別分類防治系統對于保障糧食安全和農業可持續發展具有重要意義。 傳統的小麥病害識別分類方法主…

Feign

目錄 RestTemplate方式調用存在的問題: 定義和使用Feign客戶端 自定義Feign的配置 性能優化 Feign的最佳實踐 Feign的使用步驟&#xff1a; 1、引入依賴 2、添加EnableFeignClients注解 3、編寫FeignClient接口 4、使用FeignClient中定義的方法代替RestTemplate Feign的…

什么是遷移學習

1 遷移學習概述 遷移學習&#xff08;Transfer Learning&#xff09;是機器學習中的一種方法&#xff0c;它允許模型將從一個任務中學到的知識應用到另一個相關的任務中。這種方法在數據稀缺的情況下尤為有用&#xff0c;因為它減少了對大量標記數據的需求。遷移學習已成為深度…

Node使用Nvm安裝雙版本切換(node兩個版本同時用怎么辦?不同的項目Node版本要求不一樣怎么辦?)

先把node.js卸載 開始—>添加刪除程序—>node npm -v node -v //檢查是否還存在&#xff0c;卸載成功就行了NVM下載 github下載 百度網盤下載 打開安裝包以管理員身份安裝&#xff0c;要是記得這個路徑并且必須全是英文 使用nvm安裝兩個使用的node版本 cmd以管理員…

計算機組成原理2

1.浮點數 2.IEEE 754 3.存儲器的性能指標 4.存儲器的層次化結構 主存類似手機運行內存8g &#xff0c;輔存類似手機內存128g.... 輔存必須先通過主存才能被cpu接收&#xff0c;就例如微信打開那個月亮小人界面兩三秒就是主存在讀取輔存的程序然后被cpu接收運行。 5.主存儲…

Greenplum的數據庫年齡檢查處理

概述 Greenplum是基于Postgresql數據庫的分布式數據庫&#xff0c;而PG數據庫在事務及多版本并發控制的實現方式上很特別&#xff0c;采用的是遞增事務id的方法&#xff0c;事務id大的事務&#xff0c;認為比較新&#xff0c;反之事務id小&#xff0c;認為比較舊。 事務id的上…

經典的回溯算法題leetcode組合問題整理及思路代碼詳解

目錄 組合問題 leetcode77題.組合 leetcode216題.組合總和III leetcode40題.組合總和II leetcode39題.組合總和 倘若各位不太清楚回溯算法可以去看我上一篇文章。 回溯算法詳解-CSDN博客 組合問題 一般組合和排列類的問題我們都會轉化成一個樹形問題&#xff0c;更便于…

26. 刪除有序數組中的重復項(remove-duplicates-from-sorted-array)

26. 刪除有序數組中的重復項(remove-duplicates-from-sorted-array) 給你一個 非嚴格遞增排列 的數組 nums &#xff0c;請你** 原地** 刪除重復出現的元素&#xff0c;使每個元素 只出現一次 &#xff0c;返回刪除后數組的新長度。元素的 相對順序 應該保持 一致 。然后返回 …

批量創建表空間數據文件(DM8:達夢數據庫)

DM8:達夢數據庫 - - 批量創建表空間數據文件 環境介紹1 批量創建表空間SQL2 達夢數據庫學習使用列表 環境介紹 在某些場景(分區表子表)需要批量創建表空間,給不同的表使用,以下代碼是批量創建表空間的SQL語句; 1 批量創建表空間SQL --創建 24個數據表空間,每個表空間有3個數…

強化學習小筆記 —— 如何選擇合適的更新步長

在強化學習中&#xff0c;動作價值函數的更新可以使用增量法&#xff0c;如下所示&#xff1a; Q k 1 k ∑ i 1 k r i 1 k ( r k ∑ i 1 k ? 1 r i ) 1 k ( r k ( k ? 1 ) Q k ? 1 ) 1 k ( r k k Q k ? 1 ? Q k ? 1 ) Q k ? 1 1 k [ r k ? Q k ? 1 ] \beg…

Linux寶塔面板搭建Discuz論壇, 并內網穿透實現公網訪問

Linux寶塔面板搭建Discuz論壇&#xff0c; 并內網穿透實現公網訪問 文章目錄 Linux寶塔面板搭建Discuz論壇&#xff0c; 并內網穿透實現公網訪問前言1.安裝基礎環境2.一鍵部署Discuz3.安裝cpolar工具4.配置域名訪問Discuz5.固定域名公網地址6.配置Discuz論壇 &#x1f4f7; 江池…

低代碼平臺推薦:五大低代碼廠商誰的模式更“合適”

隨著數字化時代的到來&#xff0c;低代碼開發平臺作為提高數字生產力的工具正受到越來越多企業的關注&#xff0c;市面上的低代碼產品和廠商更是“亂花漸欲迷人眼”。 各家產品不僅功能各有不同&#xff0c;甚至商機都有區別的情況&#xff0c;如何做好產品選型已然成了采購企…

C語言——指針(一)

&#x1f4dd;前言 這篇文章主要帶大家初步認識一下指針&#xff0c;供大家理解參考。 主要歸納與講解&#xff1a; 1&#xff0c;指針與指針變量 2&#xff0c;指針的基本使用&#xff08;如何定義&#xff0c;初始化&#xff0c;引用&#xff09; &#x1f3ac;個人簡介&…

計算方法 期末總結

思維導圖 緒論 算法的性質&#xff1a; 有窮性、確切性、有輸入輸出、可行性 算法的描述方法&#xff1a; 自然語言、偽代碼、流程圖、N-S流程圖 算法設計思想&#xff1a; 化大為小的縮減技術&#xff1a;二分法化難為易的校正技術&#xff1a;開方法化粗為精的松弛技術&a…