函數與數組

一.函數

1、函數的作用

定義較為復雜的但是需要重復使用的內容,以便再次使用,可以直接調用,節約時間,提高效率。

語句塊定義成函數約等于別名,定義函數,再引用函數。

封裝的可重復利用的具有特定功能的代碼。

2、函數使用步驟

①首先是定義函數

②其次是調用函數(注意:若定義完成不調用則函數無效)

③查看系統限制所有函數:declare -F

④查看函數定義詳細內容:declare -f ?函數名

⑤刪除函數:unset ?函數名

3、定義函數基本格式

1.function  函數名 () {函數內容}2.function 函數名 {函數內容}3.函數名 () {函數內容} 

4.函數變量

作用范圍
  • 函數在Shell腳本中僅在當前Shell環境中有效
  • Shell腳本中變量默認全局有效
  • 將變最限定在函數內部使用local命令
示例腳本1:Shell腳本中變量默認全局有效
#!/bin/bashfun(){i=10
}i=20
fun
echo $i
示例腳本2:將變量限定在函數內部使用local命令

5.函數的調用方法

示例腳本1:查看當前操作系統
#定義函數
#!/bin/bashos (){
if  grep -i -q "CentOS Linux 7 " /etc/os-release
then echo "此操作系統是centos 7"elif  grep -i -q "CentOS Linux 6 " /etc/os-release
then echo "此操作系統是centos 6"elif  grep -i -q "CentOS Linux 8 " /etc/os-release
then echo "此操作系統是centos 8"
fi
}#調用函數
os

示例腳本2:?函數備份yum線上源,創建yum本地源和清理緩存安裝httpd
#!/bin/bash
backups(){
cd /etc/yum.repos.d
mkdir repo.bak
mv *.repo repo.bak
mount /dev/sr0 /mnt >/dev/null
}configuration(){
echo -e '[local]\nname=local\nbaseurl=file:///mnt\nenable=1\ngpgcheck=0' >/etc/yum.repos.d/local.repo
}clean(){
yum clean all
yum makecache
yum install -y httpd > /dev/null
}backups
configuration
clean

6.函數的返回值

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

使用原則:
函數一結束就取返回值,因為$?變量只返回執行的最后一條命令的退出狀態碼

退出狀態碼必須是0~255,超出范圍將除以256取余

如何解決大于255:

7.函數傳參

在Shell中,調用函數時可以向其傳遞參數。在函數體內部,通過 $n 的形式來獲取參數的值,例如,$1表示第一個參數,$2表示第二個參數…即使用位置參數來實現參數傳遞。

示例腳本:

#!/bin/bash
sum () {
echo "第一個位置參數:" $1
echo "第二個位置參數:" $2
let n=$1+$2
echo $n
}
sum $2 $1#!/bin/bash
sum () {
echo "第一個位置參數:" $1
echo "第二個位置參數:" $2
let n=$1+$2
echo $n
}
sum $1 $2

8.函數的遞歸?

函數調用自己本身的函數

示例腳本1:階乘

二.數組

1.數組定義

與大部分編程語言類似,數組元素的下標由 0 開始

Shell 數組用括號來表示,元素用"空格"符號分割開

在shell語句中,使用、遍歷數組的時候,數組格式要寫成 ${arr[@]} 或 ${arr[*]}

2.數組分類

①關聯數組:必須聲明才可以使用,命令:delare? -A? ?數組名??

②普通數組:利用數字下標節約變量,可以不聲明也可以聲明,命令:delare -a? 數組名

delare? -a命令也可查看有哪些普通數組

3.數組的語法格式

格式一:
數組名=(value1 value2 ... valuen)
arr_number=(1 2 3 4 5 6 7 8 9)格式二:
數組名=([0]=value0 [1]=value0 [2]=value0 ...)
arr_number=([0]=1 [1]=2 [2]=3 [3]=4)格式三:
列表名:“value1 value2 valueN ..."
數組名=($列表名)
list_number="1 2 3 4 5 6"
arr_number=($list_number)格式四:
數組名[0]="value"
數組名[1]="value"
數組名[2]="value"
arr_number[0]=1
arr_number[1]=2
arr_number[2]=3

4.數組的數據類型

  • 數值類型
  • 字符類型
  • 使用 “ ”(雙引號) 或者 ‘ ’ (單引號)定義
#數組可以是數值型
a=(1 2 3 4 5);echo ${a[@]}
1 2 3 4 5#數組可以是混合型
a=(a 1 2 apple);echo ${a[@]}
a 1 2 apple

5.?獲取數組的長度

echo ${#數組名[*]} 
echo ${#數組名[@]} 

6.獲取數組下標對應的值

數組名=(元素0  元素1  元素2  ……)					定義數組
echo ${數組名[索引值]}							輸出數組索引值對應的元素,索引值為從0開始

7.數組的常用操作

7.1??數組的遍歷
#!/bin/bash
a=(1 2 3 4 5 6)
for i in ${a[@]}
doecho $i
done

7.2??數組切片
a=(0 1 2 3 4 5 6 7 8)
echo "輸出整個數組: " ${a[@]}
echo "取出數組1到3: " ${a[@]:1:3}
echo "取出數組5到后面所有的元素: " ${a[@]:5:5}

7.3 數組替換
#臨時替換
echo ${a[@]/原替換位置/替換內容} #重新賦值,可以永久修改
a=(${a[@]/原替換位置/替換內容})

7.4??數組刪除和指定下標的值刪除
#刪除整個數組
unset 數組名#刪除指定下標的值
unset 數組名[數組下標]

7.5 數組追加元素

?方法一:直接使用下標進行元素的追加

數組名[下標]=變量

方法二:?將數組的長度作為下標進行追加元素

數組名[${數組名[@]}]=變量名

方法三:?使用+=進行追加

數組名+=(變量1 變量2 ...)

7.6?declare -a:?查看所有數組

三.冒泡排序

#!/bin/bash
#排序之前的數組順序
a=(10 40 33 30 77 66 44 ) 
#確定循環比較的次數
for ((j=1;j<${#a[@]};j++))
do
#對比獲取每次的最大元素的索引位置
for ((i=0;i<${#a[@]}-j;i++))
do
#如果對比出最大元素,就把該元素賦值給后面的變量tmp
if  [ ${a[$i]} -gt ${a[$i+1]} ]
then
#定義一個變量tmp,將每次比較的最大數值放進tmp,實現變量對換
tmp=${a[$i+1]}
a[$i+1]=${a[$i]}
a[$i]=$tmp
fi
done
done
echo ${a[*]} 

補充

全部調用:echo? ${a[@]}

? ? ? ? ? ? ? ? ? echo? ${a[*]}

echo? ${#a[@]}:顯示數組的值的個數

echo? ${!a[@]}:顯示所有下標

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

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

相關文章

python+django高校科研項目管理系統2u3mx

高校科研項目管理系統采用擬開發的高校科研項目管理系統通過測試,確保在最大負載的情況下穩定運轉,各個模塊工作正常,具有較高的可用性。系統整體界面簡潔美觀,用戶使用簡單,滿足用戶需要。在因特網發展迅猛的當今社會,高校科研項目管理系統必然會成為在數字信息化建設的一個重…

Linux 查看 CPU 信息相關命令

目錄 lscpu top htop lscpu lscpu 命令是用于顯示有關 CPU 架構的信息&#xff0c;而不是用于實時監視 CPU 負載。它提供有關 CPU 類型、核心數、線程數、架構等的詳細信息。 lscpu top 命令會顯示系統的實時狀態&#xff0c;包括 CPU 使用率、內存使用率等。按下鍵盤上的…

一文詳解Vue生命周期

Vue是一種流行的用于構建用戶界面的漸進式JavaScript框架。Vue框架在開發過程中&#xff0c;特別強調對生命周期的理解和管理。通過使用生命周期鉤子函數&#xff0c;開發者能夠精確地控制Vue實例的創建、掛載、更新以及銷毀過程。本文將對Vue的生命周期進行詳細的介紹&#xf…

YOLOv8訓練自己的目標檢測數據集

YOLOv8訓練自己的目標檢測數據集 目錄標題 源碼下載環境配置安裝包訓練自己的數據集數據集文件格式數據集文件配置超參數文件配置訓練數據集命令行訓練腳本.py文件訓練 進行detect顯示detect的效果 源碼下載 YOLOv8官方的GitHub代碼&#xff0c;同時上面也有基礎環境的配置要…

IntelliJ IDEA 16創建Web項目

首先要理解一個概念&#xff1a;在IntelliJ IDEA中“new Project”相當于eclipse中的工作空間&#xff08;Workspace&#xff09;&#xff0c;而“new Module”相當于eclipse中的工程&#xff08;Project&#xff09;。以下均采用Intellij的說法&#xff0c;請自行對照轉換理解…

Maven倉庫清除remote.repositories、lastUpdated、sha1腳本

Maven倉庫清除remote.repositories、lastUpdated、sha1腳本 1. 腳本功能 清除本地maven倉庫的_remote.repositories、sha1、lastUpdated的文件 2. 腳本內容 set REPOSITORY_PATH%cd% rem 搜索中... for /f "delims" %%i in (dir /b /s "%REPOSITORY_PATH%\*…

Java 關鍵字:synchronized詳解

synchronized詳解 基本使用源碼解析常見面試題好書推薦 基本使用 Java中的synchronized關鍵字用于在多線程環境下確保數據同步。它可以用來修飾方法和代碼塊 當一個線程訪問一個對象的synchronized方法或代碼塊時&#xff0c;其他線程將無法訪問該對象的其他synchronized方法或…

【愚公系列】2023年11月 Java教學課程 188-SpringCloud(Feign遠程調用)

&#x1f3c6; 作者簡介&#xff0c;愚公搬代碼 &#x1f3c6;《頭銜》&#xff1a;華為云特約編輯&#xff0c;華為云云享專家&#xff0c;華為開發者專家&#xff0c;華為產品云測專家&#xff0c;CSDN博客專家&#xff0c;阿里云專家博主&#xff0c;阿里云簽約作者&#xf…

如何通過寶塔面板搭建一個本地MySQL數據庫服務并實現遠程訪問

寶塔安裝MySQL數據庫&#xff0c;并內網穿透實現公網遠程訪問 文章目錄 寶塔安裝MySQL數據庫&#xff0c;并內網穿透實現公網遠程訪問前言1.Mysql服務安裝2.創建數據庫3.安裝cpolar3.2 創建HTTP隧道 4.遠程連接5.固定TCP地址5.1 保留一個固定的公網TCP端口地址5.2 配置固定公網…

浙江師范黃昌勤老師關于情感分析的講座

回放&#xff1a;https://share.weiyun.com/Wvaw4OoY 收獲很大&#xff1a; 寫幾點&#xff0c; 1&#xff1a;小二聚焦 精細更有用 2&#xff1a;高產的秘訣就是 專注一個領域&#xff0c;不斷延展。 3&#xff1a;好的文章技術不是本質&#xff0c;本質還是解決了什么教育問…

九、ffmpeg命令轉封裝

開了幾天小差&#xff0c;今天繼續學習ffmpeg。 準備測試使用的視頻&#xff0c;并查看其信息 # 查看視頻信息。使用Mediainfo也可以 ffprobe test.mp4 視頻格式的信息如下。 保持編碼格式&#xff1a;ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.tsffmpeg -i…

WordPress網站如何修復數千個帖子的SEO錯誤

在本教程中&#xff0c;我們將向您展示如何解決您經常犯的SEO錯誤。 最好的是您不必花費太多時間&#xff0c;因為您不需要打開并編輯每個帖子。 相反&#xff0c;我們將向您展示如何使用 WordPress 內的電子表格來修復 WordPress 帖子的 SEO。 在這里&#xff0c;我們為您提…

nint和Pattern matching介紹(C#)

nint 最近看C# 9.0時&#xff0c;發現一個有意思的關鍵詞&#xff0c;就是nint&#xff0c;第一次看到這個&#xff0c;于是好奇心爆棚&#xff0c;就去實際操作了一下。 nint i 1000; Console.WriteLine("i{0}", i);實際結果與int的結果是一樣的&#xff0c;那為什…

ARM裸機-19(NandFlash和iNand)

1、NandFlash的接口 1.1、Nand的型號與命名 (1)、Nand的型號命名都有含義&#xff0c;就拿K9F2G08來示例分析一下&#xff1a;K9F表示是三星公司的NandFlash系列。2G表示Nand的大小是2Gbit (256MB)。08表示Nand是8位的 (8位就是數據線有8根)。 (2)、Nand命名中可以看出&#x…

【2023.11.23】JDBC基本連接語法學習?

1.導入jar包依賴&#xff1a;mysql-connector-java-8.0.27.jar 2.連接數據庫&#xff01; 3.無法解析類->導入java.sql.*&#xff0c;&#xff08;將項目方言改為Mysql&#xff09; JDBC&#xff0c;啟動&#xff01;&#xff01; public class Main {public static voi…

如何下載OpenJDK及其源碼

如果想下載 OpenJDK&#xff0c;存在以下幾種辦法&#xff1a; 最簡單的辦法是去 OpenJDK 官網&#xff0c;這里能下載 JDK9 及其以上的版本&#xff0c;還有 JDK 源碼所在的 github 地址。 第二種方法是使用 IDEA 下載&#xff0c;位置在 File->Project Structure->SD…

【Vue】核心特性(響應式)

響應式&#xff1a; 數據變化&#xff0c;視圖自動更新 接下來使用一個例子來體現一下什么是響應式 案例一&#xff1a; 訪問數據&#xff0c;視圖自動更新 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><…

【人生苦短,我學 Python】(1)初識 Python

目錄 1. 簡述2. 什么是 Python&#xff1f;3. 面向對象簡述3.1 面向過程3.2 面向對象3.3 面向對象的主要優點3.4 面向對象的基本概念3.5 面向對象程序設計 4. Python語言的版本和解釋器5. Python 編程工具6. Python 的三種編程方式7. 簡單的 Python 程序8. 高級一點的 Python 程…

數據通信與計算機網絡(精煉知識點)

前言 該部分知識點不多,分值3分 知識點 TCP TCP采用可變大小的滑動窗口協議進行流量控制。在前向糾錯系統中,當接收端檢測到錯誤后就根據糾錯編碼的規律自行糾錯;在后向糾錯系統中,接收方會請求發送方重發出錯分組。IP協議不預先建立虛電路,而是對每個數據報獨立地選擇…

Linux快速顯示文件行號并跳轉

有時候&#xff0c;想要在線上直接查看日志文件&#xff0c;搜索到關鍵詞后&#xff0c;如果一直按n找下去&#xff0c;很麻煩&#xff0c;我們可以先顯示出行號&#xff0c;確定好我們要找內容對應的行號&#xff0c;直接跳轉過去。 esc進入命令模式&#xff0c;輸入:set nu命…