shell脚本 函数与数组

一、函数

        在编写脚本时,有些脚本可以反复使用,可以调用函数来解,语句块定义成函数约等于别名

1. 函数的使用方法

        1. 定义函数

        2. 再引用函数

2. 函数的基本格式

格式一:
[function] 函数名 {
    命令序列
    [return x]         #使用return或者exit可以显式的结束函数
}
 
格式二:
函数名(){
    命令序列
}
 
格式三:
function  函数名 (){
    命令序列
}

注意事项:

1. 直接写 函数中调用函数 直接写函数名

2. 同名函数 后一个生效

3. 调用函数一定要先定义

4. 每个函数是独立

3. 函数列表

declare -A
#声明关联属组
declare -F
#查看当前已定义的函数名
declare -f
#查看已定义的函数定义
declare -f func_name
#查看指定当前已定义的函数名
declare -F func_name
#查看当前已定义的函数名定义
​unset 函数名
#删除函数

4. 函数的返回值

return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值

使用原则:

  1. 函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码

  2. 退出码必须是0-255,超出的值将为除以256取余

5. 函数的传参数

6. 函数的作用范围

函数在shell脚本中仅在当前的shell环境中有效

shell脚本中函数的变量默认全局有效

将变量限定在函数内部使用local命令

7. 函数递归

1. 函数调用自己本身的函数
2. 必须要有结束函数的语句,防止死循环

阶乘

二、数组

        数组(Array)是一种常见的数据结构,用于存储多个相同类型的元素。数组可以按照一定的顺序存储元素,并通过索引访问和修改元素。

变量和数组
  • 变量:存储单个元素的内存空间

  • 数组:存储多个元素的连续的内存空间,相当于多个变量的集合

数组名和索引
  • 索引的编号从0开始,属于数值索引

  • 索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash 4.0版本之后开始支持

  • bash的数组支持稀疏格式(索引不连续)

1. 数组的定义

定义数组格式
  1. 数组名=(value0 value1 value2 value3 ......)

  2. 数组名=([0]=value [1]=value1 [2]=value2 ....)

  3. 列表名="value0 value1 value2 value3 ...... "

    数组名=($列表名)

  4. 数组名[0]="value1"

    数组名[1]="value2"

    数组名[2]="value3"

数组的包括数据类型
  • 数值型

  • 字符型

  • 混合型数值加字符

使用" "或' '定义单引号或双引号括起来

# 定义数组
array_name=(value1 value2 value3 ...)

# 访问数组元素
${array_name[index]}

# 获取数组中的所有元素
${array_name[@]}

# 获取数组的长度
${#array_name[@]}

# 获取数组中某个元素的长度
${#array_name[index]}

# 修改数组中的元素
array_name[index]=new_value

# 删除数组中的元素
unset array_name[index]

2. 基础用法

查看下标

数组取值

输出数组索引值对应的元素,索引值为从0开始

数组替换和追加

替换

追加

数组遍历

数组切片

${ARRAY[@]:offset:number}
offset        #要跳过的元素个数
number    #要取出的元素个数
#取偏移量之后的所有元素 

查看所有数组

命令: declare -a

3. 冒泡排序

        冒泡排序(Bubble Sort)是一种简单的排序算法,它通过比较相邻的元素并交换它们的位置来排序一个数组。冒泡排序重复地遍历数组,每次遍历都比较相邻的两个元素,如果它们的顺序不正确,则交换它们的位置。经过多次遍历,最大的元素会冒泡到数组的末尾,而较小的元素会逐渐移动到数组的前面。这个过程像冒泡一样,因此得名冒泡排序。

执行过程:

5个数字 5-1=4  需要比较4轮  才能知道每一个数字的具体位置
a=(70 40 30 60 50)
轮次  总个数   需要比较的数  比几次     找到的数
第1轮  5      5个数        比4次     找到最大数    
第2轮  5      4个数        比3次     找到第二大数  
第3轮  5      3个数        比2次     找到第三大的数
第4轮  5      2个数        比1次     找到第四大的数

效果展示:

求最大值和最小值

  • 24
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值